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

Помогите Индивидуальные значения единого алгоритма

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

  1. Автор темы
    fx8320e

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

    Баллы:
    66
    Приветствую! Есть такой код:
    PHP:
    public class Debuffs extends JavaPlugin implements Listener  {
       

        public 
    void onEnable() {
            
    Bukkit.getPluginManager().registerEvents(new Debfs(), this);
            
    Bukkit.getPluginManager().registerEvents(thisthis);
            
    getLogger().info("Enable!");
        }

        public 
    void onDisable() {
            
    getLogger().info("Disable!");
        }
       
       
        static 
    int[] numArr = new int[]{3};
       
        static 
    int[] Air = new int[]{3};
                   
           
        @
    EventHandler
        
    public void thrst1(PlayerJoinEvent e) {
           
            
    Player p e.getPlayer();
            
    numArr[0] = p.getRemainingAir();
           
            
    Bukkit.getScheduler().runTaskTimer(this, () -> {
                for(
    Player player Bukkit.getOnlinePlayers()){
                    
    numArr[0] = numArr[0]-20;
                    }
            }, 
    040*20L);
            
    Bukkit.getScheduler().runTaskTimer(this, () -> {
                for(
    Player player Bukkit.getOnlinePlayers()){
                   
                    
    player.setRemainingAir(numArr[0]);
                    }
            }, 
    02);
           
            
    Bukkit.getScheduler().runTaskTimer(this, () -> {
                if(
    numArr[0] < 0) {
                    
    p.damage(2);
                }
            }, 
    05);
             
        }
       
        @
    EventHandler
        
    public void onPotionDrink(PlayerItemConsumeEvent e) {
            
    Player player e.getPlayer();
            if (
    e.getItem().getType() == Material.POTION && player.getRemainingAir() < 300) {
                
    numArr[0] = numArr[0]+60;
            }
            if (
    e.getItem().getType() == Material.MILK_BUCKET && player.getRemainingAir() < 300) {
                
    numArr[0] = numArr[0]+40;
            }
            if (
    e.getItem().getType() == Material.APPLE && player.getRemainingAir() < 300) {
                
    numArr[0] = numArr[0]+20;
            }
            if (
    e.getItem().getType() == Material.BEETROOT_SOUP && player.getRemainingAir() < 300) {
                
    numArr[0] = numArr[0]+40;
            }
            if (
    e.getItem().getType() == Material.MUSHROOM_STEW && player.getRemainingAir() < 300) {
                
    numArr[0] = numArr[0]+20;
            }
            if (
    e.getItem().getType() == Material.MELON_SLICE && player.getRemainingAir() < 300) {
                
    numArr[0] = numArr[0]+40;
            }
            if (
    e.getItem().getType() == Material.ROTTEN_FLESH && player.getRemainingAir() < 300) {
                
    numArr[0] = numArr[0]-20;
            }
            if (
    numArr[0]  < 50) {
                
    player.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS2501));
               
            }
           
        }
       
        @
    EventHandler
        
    public void air(PlayerRespawnEvent e) {
            
    Air[0] = 200;
            
    numArr[0] = 300;
        }
       
        @
    EventHandler
        
    public void air1(PlayerJoinEvent e) {
           
            
    Player p e.getPlayer();
            
    BossBar bb Bukkit.createBossBar("Воздух"BarColor.BLUEBarStyle.SEGMENTED_6);
            
    bb.addPlayer(p);
           
            
    Bukkit.getScheduler().runTaskTimer(this, () -> {
                for(
    Player player Bukkit.getOnlinePlayers()){
                    if(
    p.getWorld().getBlockAt(p.getLocation()).getType() != Material.AIR && Air[0] < 201) {
                        
    bb.setVisible(true);
                        
    bb.setProgress(bb.getProgress() - 0.1);
                    
    Air[0] = Air[0]-20;
                    }
                    else {
                    
    bb.setVisible(false);
                    
    Air[0] = Air[0]+20;
                    }
                    } 
            }, 
    01L);
             
           
            
    Bukkit.getScheduler().runTaskTimer(this, () -> {
                if(
    Air[0] < 0) {
                    
    p.damage(2);
                }
            }, 
    05);
             
        }
        }
    Он добавляет систему жажды в игру, которая выводится на HUD пузырьков воздуха. Но при изменении значения жажды одним игроком оно меняется и у остальных. Суть вопроса: как сделать код, грубо говоря, функционирующим согласно этому алгоритму для каждого игрока одинаково, но с его (игрока) уникальными значениями?
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Создай отдельный класс под хранение данных игрока, например HungerData.
    Туда перемещаешь свои поля

    int[] numArr = new int[]{3};
    int[] Air = new int[]{3};

    Учти, что от статики придётся отказаться, поскольку у каждого игрока будет свой экземпляр HungerData.

    В главном классе храни хеш-карту:
    Map<Player, HungerData> data = new HashMap<>();

    При входе игрока добавляй запись, при выходе удаляй. При необходимости просто получай.

    Как работать с Map/HashMap - в интернете информации полно.

    И рекомендую не называть поля с большой буквы, чтобы не путать их с названиями классов. Это стандарт разработки в Java
     

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