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 525 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.
    • 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