Résolu Player capability qui se supprime après la mort du joueur malgré l'utilisation du onPlayerCloned Event
-
Salut, je code un système d’ajout de cœur définitif en 1.20.1 Forge 47.3.0.
Pour ce faire, j’ai utilisé une player capability du nom de PLAYER_HEART qui contient le nombre de cœurs ajoutés.
Mon problème est donc de faire perdurer cette player capability après la mort du joueur. J’ai donc utilisé l’event onPlayerCloned, j’ai utilisé la méthode utilisée dans le tutoriel de kaupenjoe dans laquelle il crée un système de soif en 1.19.
je vous met donc mon code:
@SubscribeEvent public static void onPlayerCloned(PlayerEvent.Clone event) { if(event.isWasDeath()) { Boolean old_isPresent = event.getOriginal().getCapability(PlayerHeartProvider.PLAYER_HEART).isPresent(); System.out.println(old_isPresent); event.getOriginal().getCapability(PlayerHeartProvider.PLAYER_HEART).ifPresent(oldStore -> { event.getEntity().getCapability(PlayerHeartProvider.PLAYER_HEART).ifPresent(newStore -> { newStore.setHeart(oldStore.getHeart()); event.getEntity().getAttribute(Attributes.MAX_HEALTH).setBaseValue(newStore.getHeart() * 2); }); }); } }
Le problème est donc que old_isPresent que j’ai créé uniquement pour tester la présence de oldStore est toujours égale à false et je n’arrive pas à savoir pourquoi.
Cella fait que quand je meurt, je respawne avec la maxhealt par défaut.
J’espère que je n’ai pas fait une erreur super basique qui vous ferait perdre votre temps.
Cela fait deux semaines que je suis sur ce problème. Je vous remercie d’avance pour l’aide que vous m’apporterez.(je n’ai pas précisé, mais la variable heart de ma capability est en cœur plein et pas en demi-cœur, car je n’ai pas vraiment besoin de cette précision).
-
Je viens de comprendre mon erreur, j’avais oublié de register mes event.
Il fallait juste rajouter cette ligne de code:MinecraftForge.EVENT_BUS.register(new OnPlayerCloned());
OnPlayerCloned qui correspond au nom de la class dans laquelle se trouve mon
@SubscribeEvent -
Je viens de comprendre mon erreur, j’avais oublié de register mes event.
Il fallait juste rajouter cette ligne de code:MinecraftForge.EVENT_BUS.register(new OnPlayerCloned());
OnPlayerCloned qui correspond au nom de la class dans laquelle se trouve mon
@SubscribeEvent -