use of net.minecraft.world.damagesource.DamageSource in project Denizen-For-Bukkit by DenizenScript.
the class EntityHelperImpl method getDamageTo.
@Override
public double getDamageTo(LivingEntity attacker, Entity target) {
MobType monsterType;
if (target instanceof LivingEntity) {
monsterType = ((CraftLivingEntity) target).getHandle().getMobType();
} else {
monsterType = MobType.UNDEFINED;
}
double damage = 0;
AttributeInstance attrib = attacker.getAttribute(Attribute.GENERIC_ATTACK_DAMAGE);
if (attrib != null) {
damage = attrib.getValue();
}
if (attacker.getEquipment() != null && attacker.getEquipment().getItemInMainHand() != null) {
damage += EnchantmentHelper.getDamageBonus(CraftItemStack.asNMSCopy(attacker.getEquipment().getItemInMainHand()), monsterType);
}
if (damage <= 0) {
return 0;
}
if (target != null) {
DamageSource source;
if (attacker instanceof Player) {
source = DamageSource.playerAttack(((CraftPlayer) attacker).getHandle());
} else {
source = DamageSource.mobAttack(((CraftLivingEntity) attacker).getHandle());
}
net.minecraft.world.entity.Entity nmsTarget = ((CraftEntity) target).getHandle();
if (nmsTarget.isInvulnerableTo(source)) {
return 0;
}
if (!(nmsTarget instanceof net.minecraft.world.entity.LivingEntity)) {
return damage;
}
net.minecraft.world.entity.LivingEntity livingTarget = (net.minecraft.world.entity.LivingEntity) nmsTarget;
damage = CombatRules.getDamageAfterAbsorb((float) damage, (float) livingTarget.getArmorValue(), (float) livingTarget.getAttributeValue(Attributes.ARMOR_TOUGHNESS));
int enchantDamageModifier = EnchantmentHelper.getDamageProtection(livingTarget.getArmorSlots(), source);
if (enchantDamageModifier > 0) {
damage = CombatRules.getDamageAfterMagicAbsorb((float) damage, (float) enchantDamageModifier);
}
}
return damage;
}
use of net.minecraft.world.damagesource.DamageSource in project MagicPlugin by elBukkit.
the class CompatibilityUtils method magicDamage.
@Override
public void magicDamage(Damageable target, double amount, Entity source) {
try {
if (target == null || target.isDead())
return;
// Might need to config-drive this, or just go back to defaulting to normal damage
if (!USE_MAGIC_DAMAGE || target instanceof Witch || target instanceof Enderman || target instanceof ArmorStand || !(target instanceof LivingEntity)) {
damage(target, amount, source);
return;
}
net.minecraft.world.entity.Entity targetHandle = ((CraftEntity) target).getHandle();
if (targetHandle == null)
return;
net.minecraft.world.entity.Entity sourceHandle = source == null ? null : ((CraftEntity) source).getHandle();
// Bukkit won't allow magic damage from anything but a potion..
if (sourceHandle != null && source instanceof LivingEntity) {
Location location = target.getLocation();
ThrownPotion potion = getOrCreatePotionEntity(location);
net.minecraft.world.entity.Entity potionHandle = ((CraftEntity) potion).getHandle();
potion.setShooter((LivingEntity) source);
DamageSource magicSource = DamageSource.indirectMagic(potionHandle, sourceHandle);
// This is a bit of hack that lets us damage the ender dragon, who is a weird and annoying collection
// of various non-living entity pieces.
((EntityDamageSource) magicSource).setThorns();
try (EnteredStateTracker.Touchable damaging = isDamaging.enter()) {
damaging.touch();
targetHandle.hurt(magicSource, (float) amount);
}
} else {
try (EnteredStateTracker.Touchable damaging = isDamaging.enter()) {
damaging.touch();
targetHandle.hurt(DamageSource.MAGIC, (float) amount);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
use of net.minecraft.world.damagesource.DamageSource in project MagicPlugin by elBukkit.
the class CompatibilityUtils method damage.
@Override
public void damage(Damageable target, double amount, Entity source, String damageType) {
if (target == null || target.isDead())
return;
if (damageType.equalsIgnoreCase("direct")) {
double health = target.getHealth() - amount;
target.setHealth(Math.max(health, 0));
return;
}
if (damageType.equalsIgnoreCase("magic")) {
magicDamage(target, amount, source);
return;
}
DamageSource damageSource = getDamageSource(damageType);
if (damageSource == null) {
magicDamage(target, amount, source);
return;
}
net.minecraft.world.entity.Entity targetHandle = ((CraftEntity) target).getHandle();
if (targetHandle == null)
return;
try (EnteredStateTracker.Touchable damaging = isDamaging.enter()) {
damaging.touch();
targetHandle.hurt(damageSource, (float) amount);
} catch (Exception ex) {
ex.printStackTrace();
}
}
use of net.minecraft.world.damagesource.DamageSource in project MagicPlugin by elBukkit.
the class CompatibilityUtils method magicDamage.
@Override
public void magicDamage(Damageable target, double amount, Entity source) {
try {
if (target == null || target.isDead())
return;
// Might need to config-drive this, or just go back to defaulting to normal damage
if (!USE_MAGIC_DAMAGE || target instanceof Witch || target instanceof Enderman || target instanceof ArmorStand || !(target instanceof LivingEntity)) {
damage(target, amount, source);
return;
}
net.minecraft.world.entity.Entity targetHandle = ((CraftEntity) target).getHandle();
if (targetHandle == null)
return;
net.minecraft.world.entity.Entity sourceHandle = source == null ? null : ((CraftEntity) source).getHandle();
// Bukkit won't allow magic damage from anything but a potion..
if (sourceHandle != null && source instanceof LivingEntity) {
Location location = target.getLocation();
ThrownPotion potion = getOrCreatePotionEntity(location);
net.minecraft.world.entity.Entity potionHandle = ((CraftEntity) potion).getHandle();
potion.setShooter((LivingEntity) source);
DamageSource magicSource = DamageSource.indirectMagic(potionHandle, sourceHandle);
// This is a bit of hack that lets us damage the ender dragon, who is a weird and annoying collection
// of various non-living entity pieces.
((EntityDamageSource) magicSource).setThorns();
try (EnteredStateTracker.Touchable damaging = isDamaging.enter()) {
damaging.touch();
targetHandle.hurt(magicSource, (float) amount);
}
} else {
try (EnteredStateTracker.Touchable damaging = isDamaging.enter()) {
damaging.touch();
targetHandle.hurt(DamageSource.MAGIC, (float) amount);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
use of net.minecraft.world.damagesource.DamageSource in project MagicPlugin by elBukkit.
the class CompatibilityUtils method damage.
@Override
public void damage(Damageable target, double amount, Entity source, String damageType) {
if (target == null || target.isDead())
return;
if (damageType.equalsIgnoreCase("direct")) {
double health = target.getHealth() - amount;
target.setHealth(Math.max(health, 0));
return;
}
if (damageType.equalsIgnoreCase("magic")) {
magicDamage(target, amount, source);
return;
}
DamageSource damageSource = getDamageSource(damageType);
if (damageSource == null) {
magicDamage(target, amount, source);
return;
}
net.minecraft.world.entity.Entity targetHandle = ((CraftEntity) target).getHandle();
if (targetHandle == null)
return;
try (EnteredStateTracker.Touchable damaging = isDamaging.enter()) {
damaging.touch();
targetHandle.hurt(damageSource, (float) amount);
} catch (Exception ex) {
ex.printStackTrace();
}
}
Aggregations