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

Статус
Закрыто для дальнейших ответов.

fakeAnonimus

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

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

upd: стоит наделать проверок, аля есть ли такие игроки на сервере онлайн
Ок, примерно понимаю, как это должно работать.
А не подскажешь, как ограничить время приёма запроса? С тиками что-то ведь делать надо, а я ещё к ним даже не прикасался
 
Ок, примерно понимаю, как это должно работать.
А не подскажешь, как ограничить время приёма запроса? С тиками что-то ведь делать надо, а я ещё к ним даже не прикасался
Можно попробовать через 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
}}, 72000L, 72000L);}
 
Можно попробовать через 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
}}, 72000L, 72000L);}
Ого, спасибо за такой развёрнутый ответ. Да и в целом большое спасибо.
Тема закрыта
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх