Comment modifier les caractéristiques d'un joueur ?



  • Bonjour, je suis une jeune développeuse de mods et je rencontre un problème avec mon mods.

    J'ai pour but de fondé un serveur PvPFaction, et j'ai eu pour idée de crée une armure qui ajouterai 0.1 block de reach à un joueur,

    et une autre qui enlève 100% de son kb, j'ai réussi jusqu'au check de l'inventaire, mais je n'arrive pas à modifier c'est valeur,

    quelqu'un pourrais m'aider ? C'est pour un serveur en 1.9.4, PvPFaction Moddé.

    Seulement les armures en Syrunite pourrons avoir c'est avantages.
    Merci d'avance.


  • Administrateurs

    Bonjour,
    La section aide de la catégorie Cauldron est réservé aux demandes d'aides concernant Cauldron ou Thermos. J'ai donc déplacé la discussion dans la bonne section : support pour les moddeurs.



  • Bonjour,

    Pour la reach distance tu as la fonction EntityPlayerMP.interactionManager.setBlockReachDistance(distance) que tu peux utiliser uniquement côté serveur (car EntityPlayerMP représente l'entité du joueur côté serveur), après en 1.8.9 je sais que c'était mal implémenté j'avais du bidouiller autre chose mais peut-être qu'en 1.9.4 ça marcherait bien (d'ailleurs je vous conseillerais de passer en 1.11.2/1.12).
    Pour le knockback ça a déjà été demandé sur le forum je pense que tu dois pouvoir trouver ça, sinon c'est via l'event LivingHurtEvent que tu devrais pouvoir modifier ça si je me trompe pas.



  • Pour le knockback, il suffit de modifier la valeur de l'attribut **KNOCKBACK_RESISTANCE **:

    
    player.getAttributeMap().getAttributeInstance(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).setBaseValue(10.0D); //Plus la valeur est élevé, moins le joueur subira le knockback
    
    

    Pour la reach, le setBlockReachDistance(distance) ne marche pas (chez moi en tout cas). Apparemment, c'est beaucoup plus complexe que ça si on en croit ce tutoriel : http://jabelarminecraft.blogspot.fr/p/minecraft-modding-extending-reach-of.html



  • Le problème est que EntityPlayerMP::setBlockReachDistance ne change la reach distance que coté server donc la reach distance coté client n'est pas modifiée. Un solution serais de changer la variable Minecraft::playerController en mettant un PlayerControllerMP custom qui détermine la reachdistance en fonction de l'item porté par le joueur.

    Pour la résistance au knockback, le plus simple est de modifier la fonction getAttributeModifiers de ta class d'item et d'ajouter 25 % de résistance au kb pour chaque partie de l'armure.