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

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

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

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

    fswr33 Новичок Пользователь

    Баллы:
    21
    Нужно сделать переменную 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. Хостинг MineCraft
    <
  3. Plasticable

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

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

    fswr33 Новичок Пользователь

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

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

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

    fswr33 Новичок Пользователь

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

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

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

    fswr33 Новичок Пользователь

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

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

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

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

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

    fswr33 Новичок Пользователь

    Баллы:
    21
    Я наверно запутал, я имел в виду переменная которая находится в счедулере не используется в
    online.setSuffix(onlineCount);[DOUBLEPOST=1439841482,1439841413][/DOUBLEPOST]
    Мне нужно обновлять переменную каждые 5 секунд
     
  12. leonmark061

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

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

    fswr33 Новичок Пользователь

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

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

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

    fswr33 Новичок Пользователь

    Баллы:
    21
    А как тогда обновить переменную
     
  16. 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);
                    }
                }
    [DOUBLEPOST=1439842696,1439842157][/DOUBLEPOST]Кстати, постоянно применять к игроку одну и туже Scoreboard, для того, чтобы обновить ее, не обязательно(возможно, ошибаюсь).
     
  17. Автор темы
    fswr33

    fswr33 Новичок Пользователь

    Баллы:
    21
    Спасибо, работает[DOUBLEPOST=1439842956][/DOUBLEPOST]
    Ее надо создать для игрока, это или использовать PlayerJoinEvent или так
     
  18. craftist

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

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

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

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    [​IMG] со своим "похапэ".
     
  20. ql_Nik_lp

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

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

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

    Баллы:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    Тут Java, а не пыхыпы :rolleyes:
     

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