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

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

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

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

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

    Баллы:
    66
    Нужно сделать переменную OnlineCount глобальной чтобы она читалась в счедулере. Добавить public к строке
    long onlineCount = Bukkit.getOnlinePlayers().length; не получается
    Код:
    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);
        }
    }
    
     
  2. Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    final добавь
     
  3. Автор темы
    fswr33

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

    Баллы:
    66
    final тоже не помогает
     
  4. Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Что за ошибку пишет?
     
  5. Автор темы
    fswr33

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

    Баллы:
    66
    Нет ошибок, просто в счедулере не видит переменную так же как и без final
     
  6. Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    С чего ты взял, что не видит?
     
  7. Автор темы
    fswr33

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

    Баллы:
    66
    The value of the local variable onlineCount is not used
     
  8. Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Если не знаешь английский, хотя бы переводчиком пользуйся
     
  9. leonmark061

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

    Баллы:
    76
    Зачем вы в Runnable создаете еще одну переменную onlineCount? Добавьте той переменной, которая вне Runnable модификатор final и удалите ту, что в Runnable. Хотя можете и наоборот - удалить ту, что вне Runnable.
     
  10. Автор темы
    fswr33

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

    Баллы:
    66
    Я наверно запутал, я имел в виду переменная которая находится в счедулере не используется в
    online.setSuffix(onlineCount);
    Мне нужно обновлять переменную каждые 5 секунд
     
  11. leonmark061

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

    Баллы:
    76
    Боже. Так обновляйте ее в самом счедулере, вместе со скорбордом.
     
  12. Автор темы
    fswr33

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

    Баллы:
    66
    А что это тогда?
    Код:
                @Override
                public void run() {
                    long onlineCount = Bukkit.getOnlinePlayers().length;
                    for (Player player : Bukkit.getOnlinePlayers()){
                        player.setScoreboard(sBoard);
                    }
                }
            }, 0L, 100L);
    
     
  13. leonmark061

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

    Баллы:
    76
    Я бы назвал это "код, который ничего не делает".
     
  14. Автор темы
    fswr33

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

    Баллы:
    66
    А как тогда обновить переменную
     
  15. leonmark061

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

    Баллы:
    76
    1)
    Код:
    final Team online = sBoard.registerNewTeam("online");
    2)
    Код:
                @Override
                public void run() {
                    long onlineCount = Bukkit.getOnlinePlayers().length;
                    online.setSuffix(onlineCount);
                    for (Player player : Bukkit.getOnlinePlayers()){
                        player.setScoreboard(sBoard);
                    }
                }

    Кстати, постоянно применять к игроку одну и туже Scoreboard, для того, чтобы обновить ее, не обязательно(возможно, ошибаюсь).
     
  16. Автор темы
    fswr33

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

    Баллы:
    66
    Спасибо, работает
    Ее надо создать для игрока, это или использовать PlayerJoinEvent или так
     
  17. craftist

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

    Баллы:
    76
    Имя в Minecraft:
    SavaSivkov
    Может:
    PHP:
    global $yourVar#Может так?
     
  18. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    [​IMG] со своим "похапэ".
     
  19. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    чет завоняло(
     
  20. MrTrojan

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

    Баллы:
    98
    Имя в Minecraft:
    BlackTrojan
    Тут Java, а не пыхыпы :rolleyes:
     

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