From a009b2f9b57d08fc4047260505f925e09edd2489 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Fri, 28 May 2021 14:29:52 -0400 Subject: [PATCH] Only use convert spawners tagged by the give command (#3963) --- .../com/earth2me/essentials/Essentials.java | 2 +- .../essentials/EssentialsBlockListener.java | 24 +++++-------------- .../earth2me/essentials/items/FlatItemDb.java | 1 + .../essentials/items/LegacyItemDb.java | 1 + .../providers/ReflServerStateProvider.java | 3 +-- 5 files changed, 10 insertions(+), 21 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index c1127351a..71d135256 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -353,7 +353,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { serverStateProvider = new PaperServerStateProvider(); containerProvider = new PaperContainerProvider(); } else { - serverStateProvider = new ReflServerStateProvider(getLogger()); + serverStateProvider = new ReflServerStateProvider(); } //Event Providers diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsBlockListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsBlockListener.java index d40f3d8cf..d80298e1f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsBlockListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsBlockListener.java @@ -1,6 +1,5 @@ package com.earth2me.essentials; -import com.earth2me.essentials.utils.LocationUtil; import com.earth2me.essentials.utils.MaterialUtil; import net.ess3.api.IEssentials; import org.bukkit.GameMode; @@ -24,15 +23,9 @@ public class EssentialsBlockListener implements Listener { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onBlockPlace(final BlockPlaceEvent event) { - // Do not rely on getItemInHand(); - // http://leaky.bukkit.org/issues/663 - final ItemStack is = LocationUtil.convertBlockToItem(event.getBlockPlaced()); + final ItemStack is = event.getItemInHand(); - if (is == null) { - return; - } - - if (is.getType() == MaterialUtil.SPAWNER && event.getItemInHand() != null && event.getPlayer() != null && event.getItemInHand().getType() == MaterialUtil.SPAWNER) { + if (is.getType() == MaterialUtil.SPAWNER && ess.getPersistentDataProvider().getString(is, "convert") != null) { final BlockState blockState = event.getBlockPlaced().getState(); if (blockState instanceof CreatureSpawner) { final CreatureSpawner spawner = (CreatureSpawner) blockState; @@ -48,15 +41,10 @@ public class EssentialsBlockListener implements Listener { final User user = ess.getUser(event.getPlayer()); if (user.hasUnlimited(is) && user.getBase().getGameMode() == GameMode.SURVIVAL) { - class UnlimitedItemSpawnTask implements Runnable { - @Override - public void run() { - user.getBase().getInventory().addItem(is); - user.getBase().updateInventory(); - } - } - - ess.scheduleSyncDelayedTask(new UnlimitedItemSpawnTask()); + ess.scheduleSyncDelayedTask(() -> { + user.getBase().getInventory().addItem(is); + user.getBase().updateInventory(); + }); } } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/items/FlatItemDb.java b/Essentials/src/main/java/com/earth2me/essentials/items/FlatItemDb.java index 64fa358cd..feba4dead 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/items/FlatItemDb.java +++ b/Essentials/src/main/java/com/earth2me/essentials/items/FlatItemDb.java @@ -152,6 +152,7 @@ public class FlatItemDb extends AbstractItemDb { final EntityType entity = data.getEntity(); if (entity != null && material.toString().contains("SPAWNER")) { ess.getSpawnerItemProvider().setEntityType(stack, entity); + ess.getPersistentDataProvider().set(stack, "convert", "true"); } return stack; diff --git a/Essentials/src/main/java/com/earth2me/essentials/items/LegacyItemDb.java b/Essentials/src/main/java/com/earth2me/essentials/items/LegacyItemDb.java index f9bd11677..a1b307f0e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/items/LegacyItemDb.java +++ b/Essentials/src/main/java/com/earth2me/essentials/items/LegacyItemDb.java @@ -191,6 +191,7 @@ public class LegacyItemDb extends AbstractItemDb { if (metaData == 0) metaData = EntityType.PIG.getTypeId(); try { retval = ess.getSpawnerItemProvider().setEntityType(retval, EntityType.fromId(metaData)); + ess.getPersistentDataProvider().set(retval, "convert", "true"); } catch (final IllegalArgumentException e) { throw new Exception("Can't spawn entity ID " + metaData + " from mob spawners."); } diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java index f19145b60..e6a1b4d85 100644 --- a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java @@ -6,13 +6,12 @@ import net.ess3.provider.ServerStateProvider; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; -import java.util.logging.Logger; public class ReflServerStateProvider implements ServerStateProvider { private final Object nmsServer; private final MethodHandle nmsIsRunning; - public ReflServerStateProvider(final Logger logger) { + public ReflServerStateProvider() { Object serverObject = null; MethodHandle isRunning = null; final Class nmsClass = ReflUtil.getNMSClass("MinecraftServer");