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

Помогите как сделать таймер на сундук

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

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

    TheNightWith Ньюби

    Баллы:
    1
    Имя в Minecraft:
    DyrrothLP
    Вобщем, как добавить таймер на сундук то-есть, как в плагинах Air'Drop. Я хочу чтобы при окончании таймера, игроки смогли открыть сундук и забрать ресурсы. Если кому не сложно, можете дать ссылку на гайд по BukkitScheduler или просто простенький код где можно понять как это добавить
     
  2. RoyalCraft

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

    Баллы:
    68
    Имя в Minecraft:
    Stressless
    Хз насколько правильно, но я в рамках изучения делал как то так

    Шедулер
    Код:
    private Integer countdown = 5; // 5 секунд (если не ошибаюсь, 20L = 1 секунде)
    public void start() {
            BukkitTask task = new BukkitRunnable() {
                @Override
                public void run() {
                    if (countdown <= 0) {
                        this.cancel(); // останавливаешь шедулер
                        // Отсчет закончился, удаляешь с hashmap
                    } else {
                      countdown--;
                    }
                }
            }.runTaskTimer(MyPlugin.getInstance(), 0, 20L);
        }
    Хэшмап

    Код:
        public final HashMap<Chest, Location> chestMap = new HashMap<Chest, Location>();
    
    
        public void add(Chest chest, Location location) {
            chestMap.put(chest, location);
        }
    
        public Boolean isEventChest(Chest chest) {
            if (chestMap.get(chest) != null) {
                return true;
            }
            return false;
        }
    
        public void remove(Chest chest) {
            if (chestMap.get(chest != null) {
                chestMap.remove(chest);
            }
        }
    Дальше в Event'е PlayerInteractEvent проверял как то так

    Код:
    if (event.getAction().equals(Action.RIGHT_CLICK_BLOCK) && event.getClickedBlock().getType().equals(Material.CHEST)) {
        Chest chest = (Chest) event.getClickedBlock().getState();
        if (MyPlugin.hashMaps.isEventChest(chest)) {
            event.setCancelled(true);
            player.sendMessage("Locked");
        }
    }
    
    
    Мб поправят где то, самому интересно будет, как можно сделать лучше )
    А так, эффект ровно тот, что нужен (сундук закрыт, через 5 сек открывается)
     
  3. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth

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