Начинающий
-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Что еще можно добавить или доработать ?
EventBus:
public class EventBus {
private static final Map<Class<? extends Event>, Set<Listener<? extends Event>>> listeners = new HashMap<>();
public static void setObjectStateForListener(Object object, boolean register) {
Stream.of(object.getClass().getDeclaredFields())
.filter(field -> field.getType().equals(Listener.class))
.forEach(field -> {
boolean accessible = field.isAccessible();
try {
if (!accessible) {
field.setAccessible(!accessible);
}
Class<? extends Event> eventType = (Class<? extends Event>) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0];
if (register) {
listeners.computeIfAbsent(eventType, _ -> new HashSet<>()).add((Listener<? extends Event>) field.get(object));
} else {
listeners.get(eventType).remove((Listener<? extends Event>) field.get(object));
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} finally {
if (accessible != field.isAccessible()) {
field.setAccessible(accessible);
}
}
});
}
protected static Map<Class<? extends Event>, Set<Listener<? extends Event>>> getListeners() {
return listeners;
}
}
Event:
public class Event extends EventBus {
private boolean cancel;
public <E extends Event> E execute() {
setCancel(false);
Set<Listener<? extends Event>> listeners = getListeners().get(this.getClass());
if (Objects.nonNull(listeners)) {
listeners.stream()
.map(listener -> (Listener<E>) listener)
.forEach(listener -> listener.execute((E) this));
}
return (E) this;
}
public void setCancel(boolean cancel) {
this.cancel = cancel;
}
public boolean isCancel() {
return cancel;
}
}
Listener:
@FunctionalInterface
public interface Listener<E extends Event> {
void execute(E event);
}
Последнее редактирование: