SOLVED Énormément d'interrogations sur les Entités et le Server.


  • Bonsoir à tous,

    Il ne m’est pas coutume de créer un topic à la volée, mais de lourds points d’interrogation pèsent sur mon cerveau. J’ai au préalable fait maintes recherches sur minecraftforum ainsi que les tutoriels de minecraftforge, en vain. Je suis venu chercher réponses à mes questions ici, dans l’espoir que vous puissiez me les offrir. 😄

    Je tiens à préciser avant tout que mon problème est d’ordre intellect, il n’est nullement question d’erreurs de code ici. (pour l’instant) Venons-en donc aux faits.

    • Mettons que je souhaite créer un serveur où des joueurs pourraient interagir avec des Entités personnalisées. Cela impliquerait que le serveur soit “forgé” et que les clients aussi. Est-ce que cela veut dire que les clients et le serveur doivent avoir exactement LE MÊME mod pour que ça marche ? Ou est-ce que je peux distinguer dans plusieurs .jar différentes actions que le client n’est pas censé voir ? Par exemple, le traitement de packets effectués côté serveur, est-il possible de le mettre ailleurs pour ne pas que les clients puissent connaître le fonctionnement et “tricher” ?

    • Comment bien distinguer ce qui est fait côté client à propos des entités, et ce qui est fait côté serveur ? (les Side ?)

    • Ajouter des Entités (par exemple, des PNJ) sur la map, c’est bien, mais les sauvegarder quand on relance le serveur ou autre, c’est mieux. Mais si les joueurs et le serveur partagent le même mod.jar, comment juste enregistrer des fichiers contenant des infos sur les PNJ à spawn au lancement du serveur, côté serveur ?

    • Comment savoir que les clients se connectant à mon serveur possèdent SEULEMENT les mods qu’ils partagent avec le serveur, et non des mods permettant de “tricher” ?

    Tant d’interrogations qui me paraissent inutiles, mais j’essaye de m’éclaircir les idées au mieux pour me lancer dans le développement de mon mod.

    Je vous souhaite une agréable soirée, et espère recevoir de sages conseils de votre part.  🆒

  • Administrateurs Rédacteurs Moddeurs confirmés

    Salut,
    Dans l’ordre :

    • Non, tu peux utiliser deux jar différents. C’est ce qu’on fait avec sur notre projet NHG. Le serveur possède un jar avec tout ce que le serveur a besoin + ce qui est commun au client et au serveur, le client contient ce que le client à besoin + ce qui est commun, et le client est obfusqué pour éviter tout risque de vol de code.
      Par contre pour les paquets ça ne va pas être possible, car lorsqu’on enregistre un paquet (qui doit être enregistré sur le client et sur le serveur), il faut préciser la classe du handler (donc la classe avec la fonction pour le traitement). Sauf si tu créés deux paquets différents, un pour le client avec un handler vide et l’autre pour le serveur avec ce qu’il faut dedans, mais ça complique le code, donc il faudrait faire attention à bien mettre la même chose dans les fonction toBytes et fromByte et de bien mettre le même discriminateur (= id) au paquet en question sinon il va avoir des crashs.

    • Il suffit de regarder dans les classes de Minecraft au dessus des fonctions. Lors du setup Forge gradle mets ensemble le client et le serveur et en même temps il met un @SideOnly au dessus de chaque méthode qui sont que sur le client ou que sur le serveur. Pour les autres fonctions elles sont présentes des deux côtés. À l’intérieur des fonctions communes on a souvent besoin de faire une action que d’un des deux cotés, pour ça un petit if(!world.isRemote) pour faire quelque chose côté serveur, if(world.isRemote) pour le client.

    • Toutes les fonctions concernants les NBT ne sont que exécuté côté serveur.

    • Aucune idée. De toute façon vu le nombre de mod de triche compatible avec Forge …


  • Bonjour robin et merci de ta réponse !

    Dans le cas de votre projet NHG, qu’est-ce qui pourrait être par exemple que dans le server.jar et que dans le client.jar ? Je pense par exemple aux inputs côté clients. Si l’on souhaite que lorsque le joueur appuie sur une touche, ça envoie un paquet au serveur (comme expliqué sur l’une des vidéos youtube), séparer les .jar n’est pas possible ?

    En parlant de NBT, quelque chose me vient à l’esprit : y’a-t-il un autre moyen de garder ses PNJ sauvegardés sur le serveur hormis des File enregistrés côté serveur ?

    Bonne journée !

  • Administrateurs Rédacteurs Moddeurs confirmés

    Dans le cas de NHG on a tout ce qui est affichage sur le client seulement. Côté serveur on a tout ce qui gère le jeu (compteur de temps, génération de structure, etc …)
    Et pour le paquet et la touche si ça devrait être possible de la façon dont je l’ai expliqué (enregistrer le paquet avec un handler vide côté client, et enregistrer le même paquet avec l’action dans le handler côté serveur).

    Et pour les PNJ, les données doivent bien être enregistré quelques part, et à part dans la map du serveur je ne vois pas ou tu veux le faire … à la limite dans un fichier à part, ou sur une base de donnée sql, ça doit être faisable. Mais je ne vois pas l’intérêt, ça fait usine à gaz.