Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

MaxHealth

Тема в разделе "Разработка плагинов для новичков", создана пользователем AxmeD, 14 июл 2016.

Статус темы:
Закрыта.
  1. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    Меняю максимальное кол-во здоровья, но каждый раз, когда я перезахожу на сервер, у меня становится все равно 20/***. Пытался сохранять HP в какой-нибудь файл, а потом при заходе выдавать, но сохраняется при выходе с сервера тоже почему-то 20хп.

    Код:
       @EventHandler
       public void onQuit(PlayerQuitEvent e)
       {
         Player p = e.getPlayer();
         this.getHealthList().set(p.getName(), p.getHealth());
         saveHealthList();
       }
    
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    Проверил. Не работает именно сохранение хп при выходе, если хп больше 20-ти. Если меньше, то работает. Если больше, то сохраняет 20.0
     
  4. Larin

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

    Баллы:
    103
    Еще инвентарь пустой. Это вроде как баги...
     
  5. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    Может можно какой-то костыль сделать? Кроме ежесекундного запоминания хп всех игроков, естественно.
     
  6. CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    На чистом сервере тестил?
    Просто во-первых, AuthMe, вроде как, при залогинивании, выставляет 20 очков здоровья по стандарту.
    Во-вторых, когда ты выставляешь здоровье, количество сердец увеличивается?
     
  7. Derik

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

    Баллы:
    76
    Имя в Minecraft:
    Derik
    Надо при PlayerJoinEvent, player.setMaxHealth прописывать. А то по умолчанию 20. Вот и не получается больше сделать.

    я так реализовал
    Код:
    package me.derik;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    
    
    public class Main extends JavaPlugin implements Listener{
      
        Logger log = getLogger();
        File playerheal;
        YamlConfiguration users;
      
        @Override
        public void onEnable() {
            Bukkit.getPluginManager().registerEvents(this, this);
              playerheal = new File(getDataFolder() + File.separator + "playerheal.yml");
              users = YamlConfiguration.loadConfiguration(playerheal);
              if(!playerheal.exists()){
                  users.options().copyDefaults(true);
                saveDefaultConfig();
                log.info("Creating config file...");
              }
            
        }
      
        
      
      
        @EventHandler
        public void onJoin(PlayerJoinEvent e){
            Player player = e.getPlayer();
            String plname = player.getName();
            int heal = users.getInt(plname);
    
             if(users.getString(plname) == null){
                // log.info("В первые");
                player.setMaxHealth(50);
                player.setHealth(50);
                 users.set(plname, 50);
                 try {
                    users.save(playerheal);
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
             }
             else
             {
                player.setMaxHealth(50);
                player.setHealth(heal);
               // log.info("Уже был");
             }
            
        }
      
      
          @EventHandler
          public void onQuit(PlayerQuitEvent e)
          {
               Player player = e.getPlayer();
               String name = player.getName();
               double heal = player.getHealth();
               users.set(name, heal);
               try {
                users.save(playerheal);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
          }
      
    
      
        @Override
        public void onDisable() {
    
        }
    
    }
    
     
  8. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    1)Да, на чистом.
    2) Увеличивается, но я поставил мод рпг-интерфейс, поэтому у меня там просто полоска с цифрами :)
    Спасибо, сейчас попробую.

    UPD: Нифига не изменилось. По сути, у меня всё то же самое, просто при входе выдаю по-другому maxHealth.
    Мне сейчас нужно решить как запомнить кол-во hp игрока, когда он выходит с сервера.
     
    Последнее редактирование: 15 июл 2016
  9. Derik

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

    Баллы:
    76
    Имя в Minecraft:
    Derik
    Можно твой код полностью посмотреть? Не в сохранение тут дело, мне кажется. Меньше 20 сохраняет... Значит работает сохранение. Тут что то другое.
     
    Последнее редактирование: 15 июл 2016
  10. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    Код:
    @EventHandler
       public void setHpOnJoin(PlayerJoinEvent e)
       {
         Player p = e.getPlayer();
          double health = Stats.getPlayerStatsOfArmor(p, "Выносливость:");
          p.setMaxHealth((20 + health*3)* 1.0D);
          if(getHealthList().contains(p.getName()))
             p.setHealth(getHealthList().getDouble(p.getName()));
           else
             p.setHealth(p.getMaxHealth());
       }
      
       @SuppressWarnings("static-access")
       @EventHandler
       public void onQuit(PlayerQuitEvent e)//ne rabotaet
       {
         Player p = e.getPlayer();
         double health = p.getHealth();
         this.getHealthList().set(p.getName(), health);
         saveHealthList();
       }
    Да нет, дело в сохранении. Попробовал вручную выставить там 56HP(максимальное 100), и когда зашёл, 56 и дало.[DOUBLEPOST=1468583619,1468564828][/DOUBLEPOST]У меня будет много проблем, если я буду запоминать в какой-нибудь hashmap/конфиг кол-во здоровья каждого игрока при получении урона или регене на сервере при онлайне в 60-100 человек?
     
  11. Larin

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

    Баллы:
    103
    С hashmap ничего не будет, а вот в конфиг сразу писать - плохая идея.
     
  12. Derik

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

    Баллы:
    76
    Имя в Minecraft:
    Derik
    Поиздевался я над твоим кодом и вот что понял...
    Этой строкой ты при входе присваеваеш игроку 20 хп. максимум при входе. Записывай и сохроняй куда хочеш потм хп игрока...)) При входе она тебе не даст больше 20 хп.
    Вобщем у тебя Health получаеться больше чем MaxHealth.
     
    Последнее редактирование: 15 июл 2016
  13. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    Я же говорю, всё работает, кроме "запоминалки". Если я вручную в конфиге напишу 50, а максимум будет 76, то выдаст 50, всё там правильно)[DOUBLEPOST=1468585725,1468585695][/DOUBLEPOST]
    Хорошо, спасибо)[DOUBLEPOST=1468609133][/DOUBLEPOST]Сделал) Запоминаю каждое изменение хп игроков в HashMap и при отсоединении их от сервера записываю из HashMap'а в файл.
     
Статус темы:
Закрыта.

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