Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Хэшмэп

  • Автор темы Автор темы J_Derp
  • Дата начала Дата начала

J_Derp

Новичок
Пользователь
Баллы
6
Имя в Minecraft
J_Derp
Всем привет, сегодня опять же отвлекаю вас нубским вопросом, но это же раздел для новичков, ведь так?
Мне нужен код для определения времени между сообщениями, и узнать: повторяются ли они? Думаю, что как-то нужно использовать ХэшМэп, т.е. массив, но идей пока нету. Может кто помочь?
 
Вам нужно проверять, не идет ли за сообщением такое же раньше определенного промежутка?
 
Тут 2 действия, скорее всего.
1-ое, зависит от времени, к примеру: написал сообщение и уже в течении определённого времени я не могу написать что-либо. (Что-то вроде анти-флуд)
2-ое, проверять повторяется ли сообщение, если повторяется - отменить отправку.
 
Ну тут надо хранить и последнее сообщение пользователя, и время до окончания кулдауна.
 
Предугадывая задумки автора я бы посоветовал использовать не Map (а HashMap это только одна из её реализаций), а простой односвязный список. Элементом будет класс с хешем сообщения и переменной времени.
Использование хеша вместо самого сообщения чуть-чуть увеличит нагрузку, но чуть-чуть уменьшит используемую память. Регулярно пробегать по списку и отсекать голову с истёкшим временем. Соответсвенно поиск искать по нему, просто пробегая по всему списку в поисках аналогичного хеша сообщения (найдено - значит повтор).
Ну тут надо хранить и последнее сообщение пользователя, и время до окончания кулдауна.
Да, можно в хранимое значение ещё внести поле Player...

Ночь, голова не варит, возможно я не вижу какого-то ещё более очевидного и простого решения.
 
Последнее редактирование:
Предугадывая задумки автора я бы посоветовал использовать не Map (а HashMap это только одна из её реализаций), а простой односвязный список. Элементом будет класс с хешем сообщения и переменной времени.
Использование хеша вместо самого сообщения чуть-чуть увеличит нагрузку, но чуть-чуть уменьшит используемую память. Регулярно пробегать по списку и отсекать голову с истёкшим временем. Соответсвенно поиск искать по нему, просто пробегая по всему списку в поисках аналогичного хеша сообщения (найдено - значит повтор).
Да, можно в хранимое значение ещё внести поле Player...
Никогда не использовал Мэп, можете помочь?
Upd. Что-то я не врубаюсь в смысл текста, лол.
Вы посоветовали Мэп или ХэшМэп, который я и задумывал?
 
Могу помочь объяснить как он работает, но по возможности не сегодня, у меня уже час ночи =)
Upd. Что-то я не врубаюсь в смысл текста, лол.
Вы посоветовали Мэп или ХэшМэп, который я и задумывал?
Нет, я посоветовал LinkedList, если я сам себя правильно понял :)
 
Могу помочь объяснить как он работает, но по возможности не сегодня, у меня уже час ночи =)

Нет, я посоветовал LinkedList, если я сам себя правильно понял :)
Если что, я завтра с вами свяжусь, если кто-нибудь еще не подгонит какие-нибудь варианты.
Заранее спасибо!
 
Предугадывая задумки автора я бы посоветовал использовать не Map (а HashMap это только одна из её реализаций), а простой односвязный список. Элементом будет класс с хешем сообщения и переменной времени.
Использование хеша вместо самого сообщения чуть-чуть увеличит нагрузку, но чуть-чуть уменьшит используемую память. Регулярно пробегать по списку и отсекать голову с истёкшим временем. Соответсвенно поиск искать по нему, просто пробегая по всему списку в поисках аналогичного хеша сообщения (найдено - значит повтор).
Да, можно в хранимое значение ещё внести поле Player...

Ночь, голова не варит, возможно я не вижу какого-то ещё более очевидного и простого решения.
И на кой?
Нужно же проверять есть ли элемент, а хэшпама делает это быстрее всего.
 
Короче довольно много реализаций на самом деле.
И любая их них не настолько медленная, чтобы быть заметной до тех пор, пока на сервере не будет пробегать в чате том Войны и мира за 1 час.
 
Короче довольно много реализаций на самом деле.
И любая их них не настолько медленная, чтобы быть заметной до тех пор, пока на сервере не будет пробегать в чате том Войны и мира за 1 час.
Вот только если таких плагинов которым пофиг станет много, то станет совсем не весело. Ибо как раз война и мир каждый тик и получится.
 
Ну так может кто помочь?
Java:
private final Map<String, String> msg = new HashMap<>();

@EventHandler
public void onChat(AsyncPlayerChatEvent e) {

if(msg.containsKey(e.getPlayer().getName()) && msg.containsValue(e.getMessage()) {
e.setCancelled(true);
p.sendMessage("Please, do not repeat messages!");
}

msg.put(e.getPlayer().getName(), e.getMessage());
}
 
Java:
private final Map<String, String> msg = new HashMap<>();

@EventHandler
public void onChat(AsyncPlayerChatEvent e) {

if(msg.containsKey(e.getPlayer().getName()) && msg.containsValue(e.getMessage()) {
e.setCancelled(true);
p.sendMessage("Please, do not repeat messages!");
}

msg.put(e.getPlayer().getName(), e.getMessage());
}
А удалять из мапы кто будет? И ему кд сообщений нужно.
 
По идее тебе понадобится HashMap<Player,HashMap<String,long>>
 
Назад
Верх