MFF

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

    Fonction gerer que par le client et non par le serveur

    Planifier Épinglé Verrouillé Déplacé Résolu 1.12.x
    1.12.2
    11 Messages 3 Publieurs 526 Vues 3 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.
    • ZunF1xZ Hors-ligne
      ZunF1x
      dernière édition par

      Bonsoir, j’ai creer un systeme de metier, le probleme c’est que le systeme qui gere l’xp fonctionne que cotê client. Je sais pas si c’est possible de faire en sorte que l’xp soit gerer coté client ET cotê serveur. J’ai suivi un tuto pour creer un packet, qui fonctionne bien en solo mais en multi, la valeur xp ne s’augmente pas car je pense que l’xp n’est pas gerer sur le serveur bref… Comment on fait en sorte que ma methode addXp ajoute de l’xp a un joueur sur le serveur et le sauvegarde? J’attend vos réponses si vous pouvez m’aider. Merci à tous ceux qui veulent bien m’aider 😉

      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

        Bonjour,

        Peux-tu envoyer le code en rapport avec ta gestion d’xp ?

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

          	public void addXp(int value) {
          		xp += value;
          		
          		if (getManager().xp >= getManager().maxXp + 1) {
          			getManager().xp = 0;
          			
          			if (getManager().level == this.number) {
          				getManager().level++;
          				this.number++;
          				getManager().maxXp += 500;
          			}
          		}
          	}
          
          package fr.zunf1x.icemc.packets;
          
          import fr.zunf1x.icemc.utils.ExperienceManager;
          import io.netty.buffer.ByteBuf;
          import net.minecraft.entity.player.EntityPlayerMP;
          import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
          import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
          import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
          
          public class PacketJobsXP implements IMessage {
          	
          	private int xp;
          	private int maxXp;
          	private int level;
          	
          	public PacketJobsXP() {
          		
          	}
          	
          	public PacketJobsXP(int xp, int maxXp, int level) {
          		this.xp = xp;
          		this.maxXp = maxXp;
          		this.level = level;
          	}
          	
          	@Override
          	public void fromBytes(ByteBuf buf) {
          		this.xp = buf.readInt();
          		this.maxXp = buf.readInt();
          		this.level = buf.readInt();
          	}
          
          	@Override
          	public void toBytes(ByteBuf buf) {
          		buf.writeInt(this.xp);
          		buf.writeInt(this.maxXp);
          		buf.writeInt(this.level);
          	}
          	
          	public static class Handler implements IMessageHandler<PacketJobsXP, IMessage> {
          		@Override
          		public IMessage onMessage(PacketJobsXP message, MessageContext ctx) {
          			EntityPlayerMP player = ctx.getServerHandler().player;
          			ExperienceManager.getManager().addXp(250);
          			return null;
          		}
          	}
          }
          
          			if (button.id == 0) {
          				IceMC.network.sendToServer(new PacketJobsXP(ExperienceManager.getManager().xp, ExperienceManager.getManager().maxXp, ExperienceManager.getManager().level));
          			}
          
          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 addXp tu l’appel où et elle se trouve dans quoi comme classe ?

            Parce que là j’ai l’impression que tu essaies de synchro des valeurs calculé sur le client vers le serveur, ce qui est une très mauvaise idée puisqu’un joueur pourrait envoyer un fausse valeur pour tricher.
            Tu dois mettre en place la logique inverse : le serveur doit faire tout les calcules et la valeur doit être synchronisé avec le client.
            Si tu as une capabilité pour l’xp, le plus simple est de synchro les valeurs à la connexion du joueur, quand il rejoint le monde (tu peux utiliser l’event LivingJoinWorldEvent pour ça).

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

              il faut faire une capability?

              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

                Pas obligatoirement mais c’est mieux. Tu gère comment ton xp actuellement et la sauvegarde de sa valeur ?

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

                  je n’ai pas encore de sauvegarde mais j’ajoute l’xp a une variable dans mon code

                  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 robin4002

                    Ok donc c’est probablement il semble variable qui tu as dans une classe, pas étonnant que rien ne fonctionne côté serveur du-coup (tout le monde aura la même valeur). Il te faut une capability pour faire les choses correctement.

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

                      Okay merci ^^

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

                        Bonjour,

                        Ne pas oublier qu’il ne faut rien gérer côté client, surtout pas de fonction qui attribut quelque chose sans sécurité côté serveur, sinon 3 minutes suffisent pour que votre mod devient “le mod à ne surtout pas ajouter sur le serveur”, comme blibliocraft et beaucoup d’autres mods qui ont eu de très grosses faille car ils gèrent côté client strictement sans vérification supplémentaire côté serveur et POUF.

                        C’était juste un rappel au cas où 🙂

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

                          Okay merci!

                          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