59 lines
2.1 KiB
Java
59 lines
2.1 KiB
Java
package tc.oc.pgm.effect;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
import org.bukkit.Effect;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.EventPriority;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
import org.bukkit.event.entity.EntityDamageEvent;
|
|
import org.bukkit.potion.PotionEffectType;
|
|
import tc.oc.commons.bukkit.settings.SettingManagerProvider;
|
|
import tc.oc.pgm.Config;
|
|
import tc.oc.pgm.events.ListenerScope;
|
|
import tc.oc.pgm.match.MatchModule;
|
|
import tc.oc.pgm.match.MatchScope;
|
|
import tc.oc.pgm.settings.Settings;
|
|
import tc.oc.pgm.utils.EntityUtils;
|
|
|
|
/**
|
|
* Render blood particle effects when a player is hurt.
|
|
*/
|
|
@ListenerScope(MatchScope.RUNNING)
|
|
public class BloodMatchModule extends MatchModule implements Listener {
|
|
|
|
private final SettingManagerProvider settings;
|
|
|
|
@Inject BloodMatchModule(SettingManagerProvider settings) {
|
|
this.settings = settings;
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
|
public void onEntityDamage(final EntityDamageEvent event) {
|
|
if(event.getEntity() instanceof Player) {
|
|
Player victim = (Player) event.getEntity();
|
|
Location location = victim.getBoundingBox().center().toLocation(match.getWorld());
|
|
if(event.getDamage() > 0 && location.getY() >= 0 && !victim.hasPotionEffect(PotionEffectType.INVISIBILITY)) {
|
|
EntityUtils.entities(match.getWorld(), Player.class)
|
|
.filter(player -> settings.getManager(player).getValue(Settings.BLOOD, Boolean.class, false))
|
|
.forEach(player -> {
|
|
if(event instanceof EntityDamageByEntityEvent) {
|
|
player.playEffect(location, Effect.STEP_SOUND, Material.REDSTONE_WIRE);
|
|
} else {
|
|
player.playEffect(location, Effect.STEP_SOUND, Material.LAVA);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean shouldLoad() {
|
|
return Config.Effects.blood();
|
|
}
|
|
}
|