SPIGOT-7300, #1180: Add new DamageSource API providing enhanced information about entity damage

By: Doc <nachito94@msn.com>
This commit is contained in:
CraftBukkit/Spigot
2024-02-11 09:54:25 +11:00
parent db4af65c2e
commit 49b5ee78bb
29 changed files with 640 additions and 310 deletions

View File

@@ -2,6 +2,7 @@ package org.bukkit.craftbukkit.entity;
import net.minecraft.world.entity.boss.EntityComplexPart;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.damage.DamageSource;
import org.bukkit.entity.EnderDragon;
import org.bukkit.entity.EnderDragonPart;
import org.bukkit.entity.Entity;
@@ -26,6 +27,11 @@ public class CraftEnderDragonPart extends CraftComplexPart implements EnderDrago
return "CraftEnderDragonPart";
}
@Override
public void damage(double amount, DamageSource damageSource) {
getParent().damage(amount, damageSource);
}
@Override
public void damage(double amount) {
getParent().damage(amount);

View File

@@ -51,6 +51,7 @@ import org.bukkit.block.Block;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftSound;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.damage.CraftDamageSource;
import org.bukkit.craftbukkit.entity.memory.CraftMemoryKey;
import org.bukkit.craftbukkit.entity.memory.CraftMemoryMapper;
import org.bukkit.craftbukkit.inventory.CraftEntityEquipment;
@@ -280,13 +281,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
@Override
public void damage(double amount) {
damage(amount, null);
damage(amount, getHandle().damageSources().generic());
}
@Override
public void damage(double amount, org.bukkit.entity.Entity source) {
Preconditions.checkState(!getHandle().generation, "Cannot damage entity during world generation");
DamageSource reason = getHandle().damageSources().generic();
if (source instanceof HumanEntity) {
@@ -295,7 +294,21 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
reason = getHandle().damageSources().mobAttack(((CraftLivingEntity) source).getHandle());
}
entity.hurt(reason, (float) amount);
damage(amount, reason);
}
@Override
public void damage(double amount, org.bukkit.damage.DamageSource damageSource) {
Preconditions.checkArgument(damageSource != null, "damageSource cannot be null");
damage(amount, ((CraftDamageSource) damageSource).getHandle());
}
private void damage(double amount, DamageSource damageSource) {
Preconditions.checkArgument(damageSource != null, "damageSource cannot be null");
Preconditions.checkState(!getHandle().generation, "Cannot damage entity during world generation");
entity.hurt(damageSource, (float) amount);
}
@Override