1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем sHiti, 26 мар 2021.

  1. Автор темы
    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();
    
     
  2. Автор темы
    sHiti

    sHiti Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    itzHiti
    Решил сделать следующее:
    Код:
        @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);;
            }
    
    Но при выдаче достижений выдаёт слишком много опыта, помогите.
     
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Чуть под стол не упал :D
     
  4. Veyn12

    Veyn12 Активный участник Пользователь Заблокирован

    Баллы:
    76
    Имя в Minecraft:
    Veynique
    Человек за помощью приходит, ты его кошмаришь..
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Да какая тут может быть помощь, он даже не знает как с enum работать.
     
  6. swat1x

    swat1x Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    swat1x
    Может для начала тебе это надо куда-то сохранять, а потом уже выводить куда угодно?
     
  7. swat1x

    swat1x Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    swat1x
    Код:
    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);
        }
    
     
  8. swat1x

    swat1x Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    swat1x
    И уже через data.getInt получаешь счёт игрока и выводишь куда нужно
     
  9. _MRDen3000YT_

    _MRDen3000YT_ Активный участник Пользователь

    Баллы:
    76
    getDataFolder();
     
  10. swat1x

    swat1x Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    swat1x
    Зачем ты получаешь игрока через DisplayName. Если ты поставишь ессентиалс, который по кд меняет меняет на ник с цветовым кодом в начале, то у тебя весь метод просто работать не будет. Юзай pl.getName()
     

Поделиться этой страницей