70 lines
2.3 KiB
Java
70 lines
2.3 KiB
Java
package tc.oc.pgm.shield;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.EventPriority;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.entity.EntityDamageEvent;
|
|
import org.bukkit.event.entity.PotionEffectRemoveEvent;
|
|
import tc.oc.pgm.events.ListenerScope;
|
|
import tc.oc.pgm.match.Match;
|
|
import tc.oc.pgm.match.MatchModule;
|
|
import tc.oc.pgm.match.MatchPlayer;
|
|
import tc.oc.pgm.match.MatchScope;
|
|
import tc.oc.pgm.match.Repeatable;
|
|
import tc.oc.pgm.module.ModuleDescription;
|
|
import tc.oc.pgm.spawns.events.ParticipantDespawnEvent;
|
|
|
|
@ModuleDescription(name = "Shield")
|
|
@ListenerScope(MatchScope.RUNNING)
|
|
public class ShieldMatchModule extends MatchModule implements Listener {
|
|
|
|
final Map<MatchPlayer, ShieldPlayerModule> playerShields = new HashMap<>();
|
|
|
|
ShieldPlayerModule getShield(Entity player) {
|
|
MatchPlayer matchPlayer = getMatch().getPlayer(player);
|
|
return matchPlayer == null ? null : playerShields.get(matchPlayer);
|
|
}
|
|
|
|
public void applyShield(MatchPlayer player, ShieldParameters parameters) {
|
|
removeShield(player);
|
|
if(parameters.maxHealth > 0) {
|
|
ShieldPlayerModule shield = new ShieldPlayerModule(this, player, parameters);
|
|
shield.apply();
|
|
playerShields.put(player, shield);
|
|
}
|
|
}
|
|
|
|
public void removeShield(MatchPlayer player) {
|
|
ShieldPlayerModule shield = playerShields.remove(player);
|
|
if(shield != null) shield.remove();
|
|
}
|
|
|
|
@Repeatable
|
|
public void tick(Match match) {
|
|
for(ShieldPlayerModule shield : playerShields.values()) {
|
|
shield.tick(match);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void onDespawn(ParticipantDespawnEvent event) {
|
|
playerShields.remove(event.getPlayer());
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
|
public void onDamage(EntityDamageEvent event) {
|
|
ShieldPlayerModule shield = getShield(event.getEntity());
|
|
if(shield != null) shield.onEvent(event);
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
|
public void onPotionRemove(PotionEffectRemoveEvent event) {
|
|
ShieldPlayerModule shield = getShield(event.getEntity());
|
|
if(shield != null) shield.onEvent(event);
|
|
}
|
|
}
|