Files
2006Scape/2006Scape Server/src/main/java/com/rs2/event/UniversalEventProvider.java
T
Josh Shippam 7d64e2298f Plugins System (#510)
* Started Ripping Plugin System From Astraeus

*Currently only ClickingButtons Support
*Also Started Using The Logout Button Plugin From Astraeus

* NpcFirstClickEvent setup for plugins

also made Man & Women chat work through this

* Server: Add Google Collect Lib

* Server: NpcSecondClickEvent setup for plugins

also handle pickpocketing npc clicking through plugin

* Server: NpcThirdClickEvent setup for plugins

* Server: Remove conflicting action for Secondclicking npc id 3

* Server: ItemFirstClickEvent setup for plugins

Also Handle Yo-Yo First Click Through This

* Server: ItemOnItemEvent setup for plugins

Also Handle Black Candle Lighting With Tinderbox Through this

* Server: ItemOnNpcEvent setup for plugins

* Server: ItemOnObjectEvent setup for plugins

Also Handle Fillable Items Through This

* Server: ItemSecondClickEvent & ItemThirdClickEvent setup for plugins

Also Handle Yo-Yo Actions Through This

* Server: ObjectFirstClickEvent setup for plugins

Also Handle FirstClick Mining Actions Through This

* Server: ObjectSecondClickEvent setup for plugins

Also Handle Stall Thieving Actions Through This

* Server: ObjectThirdClickEvent setup for plugins

* Server: ObjectFourthClickEvent setup for plugins

Also Handle Fourth Click Farming Object Actions Through This

* Server: MagicOnItemEvent setup for plugins

Also Handle SuperHeat Through This

* More mage training arena (#509)

* Fixup points display

* Only allow players to deposit up to 12k at one time

* Apple damage and play animation

* Update order or prices

* Update Telekinetic.java

(cherry picked from commit ab3b1e9731)

Co-authored-by: RedSparr0w <RedSparr0w@users.noreply.github.com>
Co-authored-by: Danial <admin@redsparr0w.com>
2021-10-09 00:20:57 +01:00

72 lines
2.3 KiB
Java

package com.rs2.event;
import com.google.common.base.Preconditions;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import com.rs2.game.players.Player;
import com.rs2.util.ClassUtils;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Consumer;
/**
* A universal event provider which posts, provides and deprives subscribers.
*
* @author Ryley Kimmel <ryley.kimmel@live.com>
*/
public final class UniversalEventProvider implements EventProvider {
/**
* A {@link Multimap} of {@link Event} classes to subscribers.
*/
private final Multimap<Class<? extends Event>, EventSubscriber<? super Event>> events = ArrayListMultimap.create();
/**
* The universal context of this event provider.
*/
private final EventContext context = new UniversalEventContext();
@SuppressWarnings("unchecked")
@Override
public void provideSubscriber(EventSubscriber<?> subscriber) {
checkSubscriber(subscriber, annotation -> events.put(annotation.value(), (EventSubscriber<? super Event>) subscriber));
}
@SuppressWarnings("unchecked")
@Override
public void depriveSubscriber(EventSubscriber<?> subscriber) {
checkSubscriber(subscriber, annotation -> events.remove(annotation.value(), (EventSubscriber<? super Event>) subscriber));
}
private void checkSubscriber(EventSubscriber<?> subscriber, Consumer<SubscribesTo> consumer) {
Optional<SubscribesTo> optional = ClassUtils.getAnnotation(subscriber.getClass(), SubscribesTo.class);
Preconditions.checkArgument(optional.isPresent(), String.format("%s is not annotated with @SubscribesTo", subscriber.getClass()));
consumer.accept(optional.get());
}
@Override
public <E extends Event> void post(Player player, E event) {
Collection<EventSubscriber<? super Event>> subscribers = events.get(event.getClass());
for (EventSubscriber<? super Event> subscriber : subscribers) {
/* Check to be sure we can subscribe to the event. */
if (subscriber.test(event)) {
subscriber.subscribe(context, player, event);
/* If the chain is broken, don't continue parsing subscribers. */
if (context.isChainBroken()) {
break;
}
}
}
context.repairSubscriberChain();
}
public Multimap<Class<? extends Event>, EventSubscriber<? super Event>> getEvents() {
return events;
}
}