Communiquer par packets entre un mod Forge et un plugin Sponge



  • Bonsoir,

    Je suis un peu (beaucoup) désespéré, je n'arrive à trouver aucune réponse qui puisse m'apporter de l'aide. Voilà le topo :

    • Mon ami développe actuellement un plugin Sponge. Son plugin est un plugin PvP où les joueurs ont la possibilité de créer des villes et se battre en eux pour gagner des points. De ce fait, toute la data concernant les villes et tout le toutim est stockée dans une database MySQL et c'est le plugin qui interagit avec elle.

    • J'ai décidé de mon côté de créer un mod Forge pour ajouter du contenu inédit (blocks, items, entities & tile entities) et faciliter la gestion de ces villes en offrant aux joueurs plusieurs interfaces (gui) pour créer des villes, les gérer, etc…

    Mon problème actuellement, c'est que je n'ai aucun moyen de communiquer la data du plugin vers le mod (ou inverse). Je sais qu'on peut créer des channels pour envoyer des packets dans Forge, mais je n'ai aucune idée de comment m'y prendre pour faire du Forge à Sponge et vice versa. (Pour la petite anecdote, j'ai posté sur le forum Sponge pour tenter d'avoir des réponses et des infos concrètes, mais très sincèrement il n'y a aucune documentation sur comment utiliser le networking sur Sponge)

    Je ne vais pas vous mentir, ça m'énerve un peu (beaucoup), je vois beaucoup de tutoriaux qui montrent comment créer des blocks ou des items, mais j'ai l'impression que la communauté de modding manque sincèrement de tutoriaux sur des concepts plus poussés (comme le networking avancé ou les concepts profonds de Forge ou de Sponge).

    Du coup, ma question est : est-ce qu'il existe un moyen pour communiquer de la data entre un mod Forge et un plugin Sponge ? 🙂
    PS: je vous invite à lire mon post sur le forum Sponge plus haut pour observer les réponses qui ont déjà été données.

    Merci de votre aide !


  • Administrateurs

    Salut,
    Je n'ai jamais développé avec sponge donc je ne connais pas du tout son api.

    Par contre je vois une solution à ton problème bien plus simple :
    Dans ton mod créé une classe avec des méthodes static et dans ces derniers envoies un paquet au client. En argument pour ces méthodes tu peux mettre le joueur à qui envoyer et les données en question.

    Ensuite depuis le plugin sponge tu as juste à appeler les méthodes en question.

    try
    {
       Class spongeToForge = Class.forName("package.du.mod.SpongeToForge.class");
       Method method = spongeToForge.getMethod("nomDeLaMethode", EntityPlayer.class, String.class); // pour un string
       method.invoke(null, player, value); // methode static donc pas besoin d'instance, d'où le premier null
    }
    catch (Exception ex)
    {
    
       ex.printStackTrace()
    }
    


  • Les plugins Sponge sont différents des plugins bukkit, mais ceci t'aidera peut-être https://www.minecraftforgefrance.fr/showthread.php?tid=2668



  • Bonjour à vous deux,

    Merci de vos réponses ! Concernant la solution que propose robin, eh bien je ne comprends pas tout à fait la démarche à suivre, j'entends par là : quel système d'envoi de packet je dois utiliser dans cette fameuse classe, le networking de Forge ou celui de Sponge ? Et aussi, cette solution permet d'envoyer du plugin (server) au mod (client side), mais comment puis-je faire pour faire l'inverse et récupérer les infos ?

    À propos de la solution qu'AymericRed propose, je vais y jeter un coup d'oeil dans les moments à suivre et voir si je peux utiliser cette méthode. 🙂

    Mais pour le coup j'aimerais vraiment mieux comprendre ta solution robin !


  • Administrateurs

    Avec ma solution il faut passer uniquement par le système de paquet de forge.
    Et oui c'est que j'ai proposé c'est uniquement pour sponge vers forge.
    Mais on peut utiliser le même principe dans l'autre sens.



  • En fait le principe de Robin, c'est que les packets passent par Forge, et côté serveur, le mod et le plugin communiquent entre eux grâce à la réflexion java (donc le plugin pourra appeler des fonctions du mod, et inversement). Mais essaye déja le lien que j'ai donné, devrait être plus simple.



  • @'AymericRed':

    En fait le principe de Robin, c'est que les packets passent par Forge, et côté serveur, le mod et le plugin communiquent entre eux grâce à la réflexion java (donc le plugin pourra appeler des fonctions du mod, et inversement). Mais essaye déja le lien que j'ai donné, devrait être plus simple.

    Pour l'envoi du client vers le serveur le tutoriel semble ok, mais du coup il manque la partie réception côté Forge (donc tout ce qui est envoi du serveur vers le client). Faut-il que je fasse un mélange de ce tutoriel et de la suggestion de robin ?



  • Je sais pas si c'est le meilleur moyen, mais c'est possible de faire ça oui.