ProjectAres/PGM/src/main/java/tc/oc/pgm/channels/ChannelMatchModule.java

79 lines
2.2 KiB
Java

package tc.oc.pgm.channels;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import tc.oc.commons.bukkit.channels.Channel;
import tc.oc.commons.bukkit.channels.ChannelRouter;
import tc.oc.pgm.events.CompetitorAddEvent;
import tc.oc.pgm.events.CompetitorRemoveEvent;
import tc.oc.pgm.events.ListenerScope;
import tc.oc.pgm.events.PartyAddEvent;
import tc.oc.pgm.events.PartyRemoveEvent;
import tc.oc.pgm.match.MatchModule;
import tc.oc.pgm.match.MatchPlayer;
import tc.oc.pgm.match.MatchScope;
import tc.oc.pgm.match.MultiPlayerParty;
import tc.oc.pgm.match.Party;
import javax.inject.Inject;
import java.util.HashMap;
import java.util.Map;
@ListenerScope(MatchScope.LOADED)
public class ChannelMatchModule extends MatchModule implements Listener {
private final Map<Party, Channel> channels = new HashMap<>();
@Inject
ChannelRouter channelRouter;
@Inject PartyChannel.Factory channelFactory;
public void create(Party party) {
if(!channels.containsKey(party) && party instanceof MultiPlayerParty) {
channels.put(party, channelFactory.create(party));
}
}
public void remove(Party party) {
channels.remove(party);
}
@Override
public void load() {
match.getParties().forEach(this::create);
channelRouter.setTeamChannelFunction(player -> channels.get(match.player(player).map(MatchPlayer::getParty).orElse(null)));
}
@Override
public void disable() {
channelRouter.setTeamChannelFunction(null);
}
@Override
public void unload() {
match.getParties().forEach(this::remove);
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPartyAdd(PartyAddEvent event) {
create(event.getParty());
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPartyRemove(PartyRemoveEvent event) {
remove(event.getParty());
}
@EventHandler(priority = EventPriority.LOWEST)
public void onCompetitorAdd(CompetitorAddEvent event) {
create(event.getParty());
}
@EventHandler(priority = EventPriority.LOWEST)
public void onCompetitorRemove(CompetitorRemoveEvent event) {
remove(event.getParty());
}
}