mirror of
https://github.com/2006-Scape/2006Scape.git
synced 2026-07-02 16:49:03 +00:00
7d64e2298f
* 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>
72 lines
2.3 KiB
Java
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;
|
|
}
|
|
|
|
}
|