Bendercraft / spigot-bending

Minecraft plugin that allows players to bend elements as in the series
Other
14 stars 7 forks source link

War Leave et Bending Loop #83

Closed ghost closed 8 years ago

ghost commented 8 years ago

Bonsoir ! Alors comme c'est arrivé de nombreuses fois, le fait de faire /war leave fait entrer le bending dans une boucle d'erreur.

Dans BendingManager ligne 65 et 66 :

Team team = player.getScoreboard().getTeam(player.getName());
Objective objective = player.getScoreboard().getObjective("cooldowns");

team et objective deviennent null juste après un /war leave. En regardant le code de War sur leur github, j'ai remarqué que le plugin modifiait le scoreboard du joueur lorsqu'il quittait une Warzone, par exemple pour le sortir de son équipe actuelle. Donc player.getScoreboard().getTeam(player.getName()); n'existait plus.

Bref, du coup j'ai bricolé une petite correction, à vous de voir si elle vous convient etc ! :) A chaque fois que team ou objective est null, j'unload et je reload le scoreboard du joueur, pour retrouver la team à son nom et l'objectif cooldowns .

for(Player player : plugin.getServer().getOnlinePlayers()) {
    BendingPlayer bender = BendingPlayer.getBendingPlayer(player);
    if(bender != null && bender.isUsingScoreboard()) {
        Team team = player.getScoreboard().getTeam(player.getName());
        Objective objective = player.getScoreboard().getObjective("cooldowns");
        if(team == null || objective == null){//Reloading scoreboard
                bender.setUsingScoreboard(false);
                bender.unloadScoreboard();
                bender.setUsingScoreboard(true);
                bender.loadScoreboard();
                team = player.getScoreboard().getTeam(player.getName());
                objective = player.getScoreboard().getObjective("cooldowns");
        }

        Map<String, BendingAbilityCooldown> cooldowns = bender.getCooldowns();
[...]
Koudja commented 8 years ago

J'ai rendu les ScoreBoard plus permissifs dans un précédent commit. J'ai aussi amélioré leur gestion en général.