9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-19 15:09:25 +00:00

skip if not listeners to PreCreatureSpawnEvent

* Skip PreCreatureSpawnEvent if no listeners
This commit is contained in:
Taiyou
2025-08-19 12:36:17 +02:00
committed by GitHub
parent f12f98e2bf
commit 55de442b70

View File

@@ -0,0 +1,54 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Taiyou06 <kaandindar21@gmail.com>
Date: Sun, 17 Aug 2025 14:46:30 +0200
Subject: [PATCH] Skip PreCreatureSpawnEvent if no listeners
diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java
index 3a54fa25bf491902235392168a00c17378e01c0d..af436d22630713110ad581c955d7ed1cd53a43de 100644
--- a/net/minecraft/world/level/NaturalSpawner.java
+++ b/net/minecraft/world/level/NaturalSpawner.java
@@ -541,17 +541,35 @@ public final class NaturalSpawner {
LevelChunk chunk
) {
EntityType<?> entityType = data.type();
- // Paper start - PreCreatureSpawnEvent
- com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent event = new com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent(
- org.bukkit.craftbukkit.util.CraftLocation.toBukkit(pos, level),
- org.bukkit.craftbukkit.entity.CraftEntityType.minecraftToBukkit(entityType), org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL
- );
- if (!event.callEvent()) {
- if (event.shouldAbortSpawn()) {
- return PreSpawnStatus.ABORT;
+
+ // Leaf start - Skip PreCreatureSpawnEvent if no listeners
+ boolean shouldAbort = false;
+ boolean cancelled = false;
+
+ if (com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent.getHandlerList().getRegisteredListeners().length != 0) {
+ // Paper start - PreCreatureSpawnEvent
+ com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent event = new com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent(
+ org.bukkit.craftbukkit.util.CraftLocation.toBukkit(pos, level),
+ org.bukkit.craftbukkit.entity.CraftEntityType.minecraftToBukkit(entityType),
+ org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL
+ );
+ if (!event.callEvent()) {
+ if (event.shouldAbortSpawn()) {
+ shouldAbort = true;
+ }
+ cancelled = true;
}
+ // Paper end - PreCreatureSpawnEvent
+ }
+
+ if (shouldAbort) {
+ return PreSpawnStatus.ABORT;
+ }
+ if (cancelled) {
return PreSpawnStatus.CANCELLED;
}
+ // Leaf end - Skip PreCreatureSpawnEvent if no listeners
+
final boolean success = entityType.getCategory() != MobCategory.MISC
// Paper end - PreCreatureSpawnEvent
&& (