Помогите Сделать систему выдачи очков за достижения

  • Автор темы Автор темы sHiti
  • Дата начала Дата начала

sHiti

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
itzHiti
Приветствую всех! Недавно решил заняться написанием собственных плагинов. Написал, всё сделал, однако теперь вопрос как в следующем коде сделать возможность выдачи разного количества очков за разные виды достижений. Т.е. выдавать за обычные достижения 1 балл игроку, за цель 10 баллов и за испытание 25 баллов.
Код:
    @EventHandler
    public void advv(PlayerAdvancementDoneEvent e) {
        Player pl = e.getPlayer();
        Scoreboard sb = Bukkit.getScoreboardManager().getMainScoreboard();
        Objective ob = sb.getObjective("bac_advancements");
        if (ob == null) {
            sb.registerNewObjective("bac_advancements", "dummy", "bac_advancements");
            ob = sb.getObjective("bac_advancements");
        }
        Score score = ob.getScore(pl.getDisplayName());
        int scr = score.getScore();
 
Решил сделать следующее:
Код:
    @EventHandler
    public void advv(PlayerAdvancementDoneEvent e) {
        Player pl = e.getPlayer();
        Scoreboard sb = Bukkit.getScoreboardManager().getMainScoreboard();
        Objective ob = sb.getObjective("bac_advancements");
        if (ob == null) {
            sb.registerNewObjective("bac_advancements", "dummy", "bac_advancements");
            ob = sb.getObjective("bac_advancements");
        }
        Score score = ob.getScore(pl.getDisplayName());
        int scr = score.getScore();
        if (AdvancementFrameType.GOAL != null)
        {
            ob.getScore(pl.getDisplayName()).setScore(scr + 10);;
        }
        if (AdvancementFrameType.CHALLENGE != null)
        {
            ob.getScore(pl.getDisplayName()).setScore(scr + 25);;
        }
        else {
            ob.getScore(pl.getDisplayName()).setScore(scr + 1);;
        }

Но при выдаче достижений выдаёт слишком много опыта, помогите.
 
Может для начала тебе это надо куда-то сохранять, а потом уже выводить куда угодно?
 
Код:
File file = new File("plugins/НазваниеПлагина/players-data.yml");
    public void save(FileConfiguration data, File file) {
          try {
              data.save(file);
          } catch (IOException e) {
              e.printStackTrace();
          }
    }
@EventHandler
       public void advv(PlayerAdvancementDoneEvent e) {
        FileConfiguration data = YamlConfiguration.loadConfiguration(file);
        Player pl = e.getPlayer();
        if(data.get("players")==null){
            data.createSection("players");
            save(data, file);
        }
        Set<String> players = data.getConfigurationSection("players").getKeys(false);
        int startScore = 0;
        int scoreForAdvancment = 1;
        String playerSection = "players."+pl.getName();
        if(!players.contains(pl.getName())) {
            data.createSection(playerSection);
            data.set(playerSection, startScore);
            save(data, file);
        }
        int playerScore =  data.getInt(playerSection);
        int result = playerScore + scoreForAdvancment;
        data.set(playerSection, result);
        save(data, file);
    }
 
Код:
File file = new File("plugins/НазваниеПлагина/players-data.yml");
    public void save(FileConfiguration data, File file) {
          try {
              data.save(file);
          } catch (IOException e) {
              e.printStackTrace();
          }
    }
@EventHandler
       public void advv(PlayerAdvancementDoneEvent e) {
        FileConfiguration data = YamlConfiguration.loadConfiguration(file);
        Player pl = e.getPlayer();
        if(data.get("players")==null){
            data.createSection("players");
            save(data, file);
        }
        Set<String> players = data.getConfigurationSection("players").getKeys(false);
        int startScore = 0;
        int scoreForAdvancment = 1;
        String playerSection = "players."+pl.getName();
        if(!players.contains(pl.getName())) {
            data.createSection(playerSection);
            data.set(playerSection, startScore);
            save(data, file);
        }
        int playerScore =  data.getInt(playerSection);
        int result = playerScore + scoreForAdvancment;
        data.set(playerSection, result);
        save(data, file);
    }
И уже через data.getInt получаешь счёт игрока и выводишь куда нужно
 
Код:
            ob.getScore(pl.getDisplayName()).setScore(scr + 10);;
Зачем ты получаешь игрока через DisplayName. Если ты поставишь ессентиалс, который по кд меняет меняет на ник с цветовым кодом в начале, то у тебя весь метод просто работать не будет. Юзай pl.getName()
 
Назад
Верх