spigot/CraftBukkit-Patches/0083-Implement-SpawnerSpawnEvent.patch

68 lines
3.3 KiB
Diff
Raw Normal View History

2023-06-08 01:30:00 +10:00
From e96e4453633537ff09c62b16eb768bd830cdd8c3 Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Thu, 3 Mar 2016 19:45:46 +1100
Subject: [PATCH] Implement SpawnerSpawnEvent.
2021-03-16 09:00:00 +11:00
diff --git a/src/main/java/net/minecraft/world/level/MobSpawnerAbstract.java b/src/main/java/net/minecraft/world/level/MobSpawnerAbstract.java
2023-06-08 01:30:00 +10:00
index a2d80d87f..6d437af3c 100644
2021-03-16 09:00:00 +11:00
--- a/src/main/java/net/minecraft/world/level/MobSpawnerAbstract.java
+++ b/src/main/java/net/minecraft/world/level/MobSpawnerAbstract.java
2022-12-08 03:00:00 +11:00
@@ -158,6 +158,18 @@ public abstract class MobSpawnerAbstract {
2020-02-20 09:26:22 +11:00
}
2021-06-11 15:00:00 +10:00
// Spigot End
}
+ // Spigot Start
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callSpawnerSpawnEvent(entity, blockposition).isCancelled()) {
+ Entity vehicle = entity.getVehicle();
+ if (vehicle != null) {
2021-11-22 09:00:00 +11:00
+ vehicle.discard();
+ }
2021-11-22 09:00:00 +11:00
+ for (Entity passenger : entity.getIndirectPassengers()) {
+ passenger.discard();
2021-06-11 15:00:00 +10:00
+ }
+ continue;
+ }
+ // Spigot End
2020-02-20 09:26:22 +11:00
2021-11-22 09:00:00 +11:00
if (!worldserver.tryAddFreshEntityWithPassengers(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER)) { // CraftBukkit
this.delay(worldserver, blockposition);
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
2023-06-08 01:30:00 +10:00
index 85cf72e9a..4fc130b52 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
2023-05-11 07:10:33 +10:00
@@ -238,6 +238,8 @@ import org.bukkit.inventory.InventoryView;
2021-01-31 10:08:46 +11:00
import org.bukkit.inventory.meta.BookMeta;
2019-04-23 15:12:43 +10:00
import org.bukkit.potion.PotionEffect;
+import org.bukkit.event.entity.SpawnerSpawnEvent; // Spigot
+
public class CraftEventFactory {
2023-03-15 03:30:00 +11:00
public static org.bukkit.block.Block blockDamage; // For use in EntityDamageByBlockEvent
public static Entity entityDamage; // For use in EntityDamageByEntityEvent
2023-05-11 07:10:33 +10:00
@@ -1536,6 +1538,21 @@ public class CraftEventFactory {
return event;
}
2016-03-12 20:59:15 +11:00
+ /**
+ * Mob spawner event.
+ */
+ public static SpawnerSpawnEvent callSpawnerSpawnEvent(Entity spawnee, BlockPosition pos) {
+ org.bukkit.craftbukkit.entity.CraftEntity entity = spawnee.getBukkitEntity();
+ BlockState state = entity.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()).getState();
+ if (!(state instanceof org.bukkit.block.CreatureSpawner)) {
+ state = null;
+ }
+
+ SpawnerSpawnEvent event = new SpawnerSpawnEvent(entity, (org.bukkit.block.CreatureSpawner) state);
+ entity.getServer().getPluginManager().callEvent(event);
+ return event;
+ }
2016-03-12 20:59:15 +11:00
+
public static EntityToggleGlideEvent callToggleGlideEvent(EntityLiving entity, boolean gliding) {
EntityToggleGlideEvent event = new EntityToggleGlideEvent((LivingEntity) entity.getBukkitEntity(), gliding);
2023-06-08 01:30:00 +10:00
entity.level().getCraftServer().getPluginManager().callEvent(event);
--
2023-05-11 07:10:33 +10:00
2.40.1