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

fx8320e

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

    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(new Debfs(), this);
        Bukkit.getPluginManager().registerEvents(this, this);
        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;
                }
        }, 0, 40*20L);
        Bukkit.getScheduler().runTaskTimer(this, () -> {
            for(Player player : Bukkit.getOnlinePlayers()){
               
                player.setRemainingAir(numArr[0]);
                }
        }, 0, 2);
       
        Bukkit.getScheduler().runTaskTimer(this, () -> {
            if(numArr[0] < 0) {
                p.damage(2);
            }
        }, 0, 5);
         
    }
   
    @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.WEAKNESS, 250, 1));
           
        }
       
    }
   
    @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.BLUE, BarStyle.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;
                }
                } 
        }, 0, 1L);
         
       
        Bukkit.getScheduler().runTaskTimer(this, () -> {
            if(Air[0] < 0) {
                p.damage(2);
            }
        }, 0, 5);
         
    }
    }
Он добавляет систему жажды в игру, которая выводится на HUD пузырьков воздуха. Но при изменении значения жажды одним игроком оно меняется и у остальных. Суть вопроса: как сделать код, грубо говоря, функционирующим согласно этому алгоритму для каждого игрока одинаково, но с его (игрока) уникальными значениями?
 
Создай отдельный класс под хранение данных игрока, например HungerData.
Туда перемещаешь свои поля

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

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

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

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

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

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