Only use convert spawners tagged by the give command (#3963)

This commit is contained in:
Josh Roy 2021-05-28 14:29:52 -04:00 committed by GitHub
parent 7852aedabd
commit a009b2f9b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 10 additions and 21 deletions

View File

@ -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

View File

@ -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();
});
}
}
}

View File

@ -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;

View File

@ -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.");
}

View File

@ -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");