diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index c1127351af..71d1352564 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 void onEnable() { 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 d40f3d8cf3..d80298e1f2 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 EssentialsBlockListener(final IEssentials ess) { @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 void onBlockPlace(final BlockPlaceEvent event) { 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 64fa358cdd..feba4deade 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 ItemStack get(String id, final boolean useResolvers) throws Exception { 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 f9bd116777..a1b307f0e1 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 ItemStack get(final String id, final boolean useResolvers) throws Excepti 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 f19145b60e..e6a1b4d855 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 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");