42 lines
2.1 KiB
Java
42 lines
2.1 KiB
Java
package me.sashegdev.blackknife;
|
|
|
|
import net.kyori.adventure.text.Component;
|
|
import net.kyori.adventure.text.format.NamedTextColor;
|
|
import org.bukkit.Particle;
|
|
import org.bukkit.Sound;
|
|
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;
|
|
|
|
public class ParryHandler implements Listener {
|
|
private final BlackKnifePlugin plugin;
|
|
public ParryHandler(BlackKnifePlugin plugin) { this.plugin = plugin; }
|
|
|
|
@EventHandler(priority = EventPriority.HIGH)
|
|
public void onDamage(EntityDamageByEntityEvent e) {
|
|
if (!(e.getEntity() instanceof Player victim)) return;
|
|
if (e.isCancelled()) return;
|
|
if (BlackKnifeItem.is(victim.getInventory().getItemInMainHand()) || BlackKnifeItem.is(victim.getInventory().getItemInOffHand())) {
|
|
TensionManager tm = plugin.getTension();
|
|
if (tm.getTP(victim) < 37.5f) return;
|
|
double original = e.getDamage();
|
|
double reduced = original * 0.4;
|
|
e.setDamage(reduced);
|
|
tm.setTP(victim, tm.getTP(victim) - 37.5f);
|
|
victim.getWorld().spawnParticle(Particle.CRIT, victim.getLocation().add(0, 1, 0), 12, 0.3, 0.4, 0.3, 0.1);
|
|
victim.getWorld().spawnParticle(Particle.SMOKE, victim.getLocation().add(0, 1, 0), 8, 0.2, 0.3, 0.2, 0.02);
|
|
victim.getWorld().playSound(victim.getLocation(), Sound.ITEM_SHIELD_BLOCK, 1f, 1.1f);
|
|
victim.sendActionBar(Component.text(String.format("PARRY -60%% (%.0f→%.0f) -15%% TP", original, reduced)).color(NamedTextColor.AQUA));
|
|
if (e.getDamager() instanceof Player attacker) attacker.sendActionBar(Component.text("PARRIED!").color(NamedTextColor.GRAY));
|
|
return;
|
|
}
|
|
var magicListener = plugin.getMagicListener();
|
|
if (magicListener != null && magicListener.isShielded(victim)) {
|
|
double reduced = magicListener.reduceShieldDamage(victim, e.getDamage());
|
|
e.setDamage(reduced);
|
|
}
|
|
}
|
|
}
|