SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, #1008: Add EntityRemoveEvent

By: DerFrZocker <derrieple@gmail.com>
This commit is contained in:
CraftBukkit/Spigot
2024-02-21 20:55:34 +11:00
parent 6dc11b5d28
commit 64cd2b148a
81 changed files with 2037 additions and 475 deletions

View File

@@ -182,6 +182,7 @@ import org.bukkit.event.entity.EntityKnockbackEvent;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.entity.EntityPlaceEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.entity.EntityRemoveEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.entity.EntitySpellCastEvent;
@@ -659,7 +660,7 @@ public class CraftEventFactory {
if (spawnReason != SpawnReason.CUSTOM) {
if (isAnimal && !world.getWorld().getAllowAnimals() || isMonster && !world.getWorld().getAllowMonsters() || isNpc && !world.getCraftServer().getServer().areNpcsEnabled()) {
entity.discard();
entity.discard(null); // Add Bukkit remove cause
return false;
}
}
@@ -697,12 +698,12 @@ public class CraftEventFactory {
if (event != null && (event.isCancelled() || entity.isRemoved())) {
Entity vehicle = entity.getVehicle();
if (vehicle != null) {
vehicle.discard();
vehicle.discard(null); // Add Bukkit remove cause
}
for (Entity passenger : entity.getIndirectPassengers()) {
passenger.discard();
passenger.discard(null); // Add Bukkit remove cause
}
entity.discard();
entity.discard(null); // Add Bukkit remove cause
return false;
}
@@ -1829,4 +1830,20 @@ public class CraftEventFactory {
Bukkit.getPluginManager().callEvent(event);
return event;
}
public static void callEntityRemoveEvent(Entity entity, EntityRemoveEvent.Cause cause) {
if (entity instanceof EntityPlayer) {
return; // Don't call for player
}
if (cause == null) {
// Don't call if cause is null
// This can happen when an entity changes dimension,
// the entity gets removed during world gen or
// the entity is removed before it is even spawned (when the spawn event is cancelled for example)
return;
}
Bukkit.getPluginManager().callEvent(new EntityRemoveEvent(entity.getBukkitEntity(), cause));
}
}