Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Как сделать переменную глобальной?

fswr33

Активный участник
Пользователь
Баллы
66
Нужно сделать переменную OnlineCount глобальной чтобы она читалась в счедулере. Добавить public к строке
long onlineCount = Bukkit.getOnlinePlayers().length; не получается
Java:
public final class Main extends JavaPlugin implements Listener{
    public void onEnable()
    {
        getServer().getPluginManager().registerEvents(this, this);
        BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
      
        ScoreboardManager sbManager = Bukkit.getScoreboardManager();
        final Scoreboard sBoard = sbManager.getNewScoreboard();
      
        long onlineCount = Bukkit.getOnlinePlayers().length;
      
        Team online = sBoard.registerNewTeam("online");
        online.setSuffix(onlineCount);
        online.addPlayer(Bukkit.getOfflinePlayer("Онлайн: "));
      
        Objective obj = sBoard.registerNewObjective("MineChest", "dummy");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.setDisplayName(ChatColor.GRAY + "" + ChatColor.BOLD + "Mine" + ChatColor.GOLD + ChatColor.BOLD + "Chest");
      
        Score score = obj.getScore(Bukkit.getOfflinePlayer("Онлайн: "));
        score.setScore(1);
      
        scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {
                long onlineCount = Bukkit.getOnlinePlayers().length;
                for (Player player : Bukkit.getOnlinePlayers()){
                    player.setScoreboard(sBoard);
                }
            }
        }, 0L, 100L);
    }
}
 
Нужно сделать переменную OnlineCount глобальной чтобы она читалась в счедулере. Добавить public к строке
long onlineCount = Bukkit.getOnlinePlayers().length; не получается
Java:
public final class Main extends JavaPlugin implements Listener{
    public void onEnable()
    {
        getServer().getPluginManager().registerEvents(this, this);
        BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
    
        ScoreboardManager sbManager = Bukkit.getScoreboardManager();
        final Scoreboard sBoard = sbManager.getNewScoreboard();
    
        long onlineCount = Bukkit.getOnlinePlayers().length;
    
        Team online = sBoard.registerNewTeam("online");
        online.setSuffix(onlineCount);
        online.addPlayer(Bukkit.getOfflinePlayer("Онлайн: "));
    
        Objective obj = sBoard.registerNewObjective("MineChest", "dummy");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.setDisplayName(ChatColor.GRAY + "" + ChatColor.BOLD + "Mine" + ChatColor.GOLD + ChatColor.BOLD + "Chest");
    
        Score score = obj.getScore(Bukkit.getOfflinePlayer("Онлайн: "));
        score.setScore(1);
    
        scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {
                long onlineCount = Bukkit.getOnlinePlayers().length;
                for (Player player : Bukkit.getOnlinePlayers()){
                    player.setScoreboard(sBoard);
                }
            }
        }, 0L, 100L);
    }
}
Зачем вы в Runnable создаете еще одну переменную onlineCount? Добавьте той переменной, которая вне Runnable модификатор final и удалите ту, что в Runnable. Хотя можете и наоборот - удалить ту, что вне Runnable.
 
Я наверно запутал, я имел в виду переменная которая находится в счедулере не используется в
online.setSuffix(onlineCount);
Зачем вы в Runnable создаете еще одну переменную onlineCount? Добавьте той переменной, которая вне Runnable модификатор final и удалите ту, что в Runnable. Хотя можете и наоборот - удалить ту, что вне Runnable.
Мне нужно обновлять переменную каждые 5 секунд
 
Я наверно запутал, я имел в виду переменная которая находится в счедулере не используется в
online.setSuffix(onlineCount);

Мне нужно обновлять переменную каждые 5 секунд
Боже. Так обновляйте ее в самом счедулере, вместе со скорбордом.
 
Боже. Так обновляйте ее в самом счедулере, вместе со скорбордом.
А что это тогда?
Java:
            @Override
            public void run() {
                long onlineCount = Bukkit.getOnlinePlayers().length;
                for (Player player : Bukkit.getOnlinePlayers()){
                    player.setScoreboard(sBoard);
                }
            }
        }, 0L, 100L);
 
1)
Java:
final Team online = sBoard.registerNewTeam("online");
2)
Java:
            @Override
            public void run() {
                long onlineCount = Bukkit.getOnlinePlayers().length;
                online.setSuffix(onlineCount);
                for (Player player : Bukkit.getOnlinePlayers()){
                    player.setScoreboard(sBoard);
                }
            }

Кстати, постоянно применять к игроку одну и туже Scoreboard, для того, чтобы обновить ее, не обязательно(возможно, ошибаюсь).
 
1)
Java:
final Team online = sBoard.registerNewTeam("online");
2)
Java:
            @Override
            public void run() {
                long onlineCount = Bukkit.getOnlinePlayers().length;
                online.setSuffix(onlineCount);
                for (Player player : Bukkit.getOnlinePlayers()){
                    player.setScoreboard(sBoard);
                }
            }

Кстати, постоянно применять к игроку одну и туже Scoreboard, для того, чтобы обновить ее, не обязательно(возможно, ошибаюсь).
Спасибо, работает
Кстати, постоянно применять к игроку одну и туже Scoreboard, для того, чтобы обновить ее, не обязательно(возможно, ошибаюсь).
Ее надо создать для игрока, это или использовать PlayerJoinEvent или так
 
Может:
PHP:
global $yourVar; #Может так?
 
Может:
PHP:
global $yourVar; #Может так?
srzrngl734fq.jpg
со своим "похапэ".
 

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

Назад
Верх