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

Помогите Ожидание выполнения следующей команды

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

Статус темы:
Закрыта.
  1. Автор темы
    fakeAnonimus

    fakeAnonimus Ньюби Пользователь

    Баллы:
    1
    Простейший пример - запрос на телепортацию в Essentials: сначала /call от одного игрока, потом /tpaccept от другого. Как это правильно делать? Желательно просто и для дурака
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Мути мапу <String,UUID>, где за ключ хранишь ник игрока, которому ПРИСЛАЛИ запрос, а в значении, который ОТОСЛАЛ.
    При /call Valera добавляешь в мапу - map.put(arg[0].toLowerCase(),((Player)sender).getUniqueID());
    При /tpyes достаешь из мапы - Player tpDude=Bukkit.getPlayer(map.get(player.getName().toLowerCase()));

    upd: стоит наделать проверок, аля есть ли такие игроки на сервере онлайн
     
    Последнее редактирование: 27 ноя 2018
  3. Автор темы
    fakeAnonimus

    fakeAnonimus Ньюби Пользователь

    Баллы:
    1
    Ок, примерно понимаю, как это должно работать.
    А не подскажешь, как ограничить время приёма запроса? С тиками что-то ведь делать надо, а я ещё к ним даже не прикасался
     
  4. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Можно попробовать через System.currentTimeMillis().
    Создаешь класс, например, TpPlayer, хранишь там UUID отправителя и время отправки(метод выше), и хранишь эти экземпляры в мапе вместо UUID.
    При проверке просто вычитаешь текущие время и время отправки. Если разница, например, больше 3000(3 секунды), то выводишь ошибку.

    Не стоит забывать выгружать это дело - после использования /tpyes удалять из мапы запрос и проводить очистку от старых запросов хотя бы раз в час.
    PHP:
    private void startScheduler(JavaPlugin plugin) {
    Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { public void run() {
        
    // Код здесь будет запускаться раз в час
        // TODO: Очистка старых запросов на телепортацию
        // В секунде ~20 тиков. В часе 3600 секунд. 20*3600=72000
    }}, 72000L72000L);}
     
  5. Автор темы
    fakeAnonimus

    fakeAnonimus Ньюби Пользователь

    Баллы:
    1
    Ого, спасибо за такой развёрнутый ответ. Да и в целом большое спасибо.
    Тема закрыта
     
Статус темы:
Закрыта.

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