72 lines
2.2 KiB
Java
72 lines
2.2 KiB
Java
package me.skymc.taboolib.damage;
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.entity.LivingEntity;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import me.skymc.taboolib.TabooLib;
|
|
|
|
public class DamageUtils {
|
|
|
|
public static void damage(Player damager, LivingEntity victim, double damage)
|
|
{
|
|
dmg(damager, victim, damage);
|
|
}
|
|
|
|
public static void damage(Player damager, Entity victim, double damage)
|
|
{
|
|
if (victim instanceof LivingEntity) {
|
|
dmg(damager, (LivingEntity) victim, damage);
|
|
}
|
|
}
|
|
|
|
public static void dmg(LivingEntity paramLivingEntity1, LivingEntity paramLivingEntity2, double paramDouble)
|
|
{
|
|
if ((paramLivingEntity2.hasMetadata("NPC")) || (paramLivingEntity1.hasMetadata("NPC"))) {
|
|
return;
|
|
}
|
|
|
|
Object localObject1 = null;
|
|
try
|
|
{
|
|
localObject1 = paramLivingEntity1.getClass().getDeclaredMethod("getHandle", new Class[0]).invoke(paramLivingEntity1);
|
|
}
|
|
catch (IllegalAccessException|IllegalArgumentException|InvocationTargetException|NoSuchMethodException|SecurityException localIllegalAccessException1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Object localObject2 = null;
|
|
try
|
|
{
|
|
localObject2 = paramLivingEntity2.getClass().getDeclaredMethod("getHandle", new Class[0]).invoke(paramLivingEntity2);
|
|
}
|
|
catch (IllegalAccessException|IllegalArgumentException|InvocationTargetException|NoSuchMethodException|SecurityException localIllegalAccessException2)
|
|
{
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
Class<?> DamageSource = nmsClass("DamageSource");
|
|
Object localObject3 = DamageSource.getDeclaredMethod("playerAttack", new Class[]{nmsClass("EntityHuman")}).invoke(DamageSource, localObject1);
|
|
|
|
localObject2.getClass().getDeclaredMethod("damageEntity", new Class[]{DamageSource, Float.TYPE}).invoke(localObject2, localObject3, (float) paramDouble);
|
|
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException ignored)
|
|
{
|
|
}
|
|
}
|
|
|
|
private static Class<?> nmsClass(String paramString)
|
|
{
|
|
String str = "net.minecraft.server." + TabooLib.getVersion() + "." + paramString;
|
|
try {
|
|
return Class.forName(str);
|
|
} catch (ClassNotFoundException e) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|