Files
DeltaMine/src/main/java/me/sashegdev/blackknife/ParryHandler.java
T

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);
}
}
}