49 lines
1.4 KiB
Java
49 lines
1.4 KiB
Java
package tc.oc.pgm.modules;
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.entity.CreatureSpawnEvent;
|
|
import tc.oc.pgm.events.ListenerScope;
|
|
import tc.oc.pgm.match.Match;
|
|
import tc.oc.pgm.filters.Filter;
|
|
import tc.oc.pgm.filters.query.EntitySpawnQuery;
|
|
import tc.oc.pgm.match.MatchModule;
|
|
import tc.oc.pgm.match.MatchScope;
|
|
import tc.oc.pgm.mutation.MutationMatchModule;
|
|
|
|
@ListenerScope(MatchScope.LOADED)
|
|
public class MobsMatchModule extends MatchModule implements Listener {
|
|
|
|
private final Filter mobsFilter;
|
|
|
|
public MobsMatchModule(Match match, Filter mobsFilter) {
|
|
super(match);
|
|
this.mobsFilter = mobsFilter;
|
|
}
|
|
|
|
@Override
|
|
public void load() {
|
|
super.load();
|
|
getMatch().getWorld().setSpawnFlags(false, false);
|
|
}
|
|
|
|
@Override
|
|
public void enable() {
|
|
getMatch().getWorld().setSpawnFlags(true, true);
|
|
}
|
|
|
|
@Override
|
|
public void disable() {
|
|
getMatch().getWorld().setSpawnFlags(false, false);
|
|
}
|
|
|
|
@EventHandler(ignoreCancelled = true)
|
|
public void checkSpawn(final CreatureSpawnEvent event) {
|
|
if(!match.module(MutationMatchModule.class).map(mmm -> mmm.allowMob(event.getSpawnReason())).orElse(false) &&
|
|
event.getSpawnReason() != CreatureSpawnEvent.SpawnReason.CUSTOM) {
|
|
event.setCancelled(mobsFilter.query(new EntitySpawnQuery(event, event.getEntity(), event.getSpawnReason())).isDenied());
|
|
}
|
|
}
|
|
|
|
}
|