From d5c4bebfad3358560b113524052989a87915621a Mon Sep 17 00:00:00 2001 From: Ineusia Date: Sat, 28 Sep 2024 16:26:22 -0400 Subject: [PATCH] Fix slime spawner exploit (#5089) * Fix slime spawner exploit * Move slime/magmacube into a constant --- .../nossr50/listeners/EntityListener.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index 72ee68df5..7d995fcd6 100644 --- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -45,6 +45,9 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.projectiles.ProjectileSource; +import java.util.Arrays; +import java.util.List; + import static com.gmail.nossr50.util.MobMetadataUtils.*; public class EntityListener implements Listener { @@ -55,6 +58,7 @@ public class EntityListener implements Listener { * check if a {@link Player} has a {@link Trident} enchanted with "Piercing". */ private final NamespacedKey piercingEnchantment = NamespacedKey.minecraft("piercing"); + private final List transformableEntities = Arrays.asList(EntityType.SLIME, EntityType.MAGMA_CUBE); public EntityListener(final mcMMO pluginRef) { this.pluginRef = pluginRef; @@ -72,6 +76,11 @@ public class EntityListener implements Listener { } } } + + // Clear the original slime/magma cubes metadata - it's dead. + if (transformableEntities.contains(livingEntity.getType())) { + mcMMO.getTransientMetadataTools().cleanLivingEntityMetadata(livingEntity); + } } } @@ -652,7 +661,14 @@ public class EntityListener implements Listener { */ @EventHandler(priority = EventPriority.LOWEST) public void onEntityDeathLowest(EntityDeathEvent event) { - mcMMO.getTransientMetadataTools().cleanLivingEntityMetadata(event.getEntity()); + LivingEntity entity = event.getEntity(); + + // Clear metadata for Slimes/Magma Cubes after transformation events take place, otherwise small spawned slimes will not have any tags + if (transformableEntities.contains(entity.getType())) { + return; + } + + mcMMO.getTransientMetadataTools().cleanLivingEntityMetadata(entity); } /**