Fix recipe command on Paper (#3404)

This commit is contained in:
pop4959 2020-07-01 15:19:42 -07:00 committed by GitHub
parent 9c487b0aac
commit 024c56efdd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 70 additions and 23 deletions

View file

@ -41,6 +41,7 @@ import net.ess3.api.*;
import net.ess3.nms.refl.providers.ReflServerStateProvider; import net.ess3.nms.refl.providers.ReflServerStateProvider;
import net.ess3.nms.refl.providers.ReflSpawnEggProvider; import net.ess3.nms.refl.providers.ReflSpawnEggProvider;
import net.ess3.provider.PotionMetaProvider; import net.ess3.provider.PotionMetaProvider;
import net.ess3.provider.ProviderListener;
import net.ess3.provider.ServerStateProvider; import net.ess3.provider.ServerStateProvider;
import net.ess3.provider.SpawnEggProvider; import net.ess3.provider.SpawnEggProvider;
import net.ess3.provider.SpawnerProvider; import net.ess3.provider.SpawnerProvider;
@ -51,10 +52,12 @@ import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.command.*; import org.bukkit.command.*;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.event.world.WorldUnloadEvent; import org.bukkit.event.world.WorldUnloadEvent;
@ -108,6 +111,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
private transient SpawnEggProvider spawnEggProvider; private transient SpawnEggProvider spawnEggProvider;
private transient PotionMetaProvider potionMetaProvider; private transient PotionMetaProvider potionMetaProvider;
private transient ServerStateProvider serverStateProvider; private transient ServerStateProvider serverStateProvider;
private transient ProviderListener recipeBookEventProvider;
private transient Kits kits; private transient Kits kits;
public Essentials() { public Essentials() {
@ -139,7 +143,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
i18n.onEnable(); i18n.onEnable();
i18n.updateLocale("en"); i18n.updateLocale("en");
Console.setInstance(this); Console.setInstance(this);
LOGGER.log(Level.INFO, tl("usingTempFolderForTesting")); LOGGER.log(Level.INFO, tl("usingTempFolderForTesting"));
LOGGER.log(Level.INFO, dataFolder.toString()); LOGGER.log(Level.INFO, dataFolder.toString());
settings = new Settings(this); settings = new Settings(this);
@ -163,7 +167,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
i18n = new I18n(this); i18n = new I18n(this);
i18n.onEnable(); i18n.onEnable();
execTimer.mark("I18n1"); execTimer.mark("I18n1");
Console.setInstance(this); Console.setInstance(this);
if (!VersionUtil.isServerSupported()) { if (!VersionUtil.isServerSupported()) {
@ -258,6 +262,18 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
serverStateProvider = new ReflServerStateProvider(getLogger()); serverStateProvider = new ReflServerStateProvider(getLogger());
} }
//Event Providers
if (PaperLib.isPaper()) {
try {
Class.forName("com.destroystokyo.paper.event.player.PlayerRecipeBookClickEvent");
recipeBookEventProvider = new PaperRecipeBookListener(event -> {
if (this.getUser(((PlayerEvent) event).getPlayer()).isRecipeSee()) {
((Cancellable) event).setCancelled(true);
}
});
} catch (ClassNotFoundException ignored) {}
}
execTimer.mark("Init(Providers)"); execTimer.mark("Init(Providers)");
reload(); reload();
@ -351,6 +367,10 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials {
pm.registerEvents(tntListener, this); pm.registerEvents(tntListener, this);
if (recipeBookEventProvider != null) {
pm.registerEvents(recipeBookEventProvider, this);
}
jails.resetListener(); jails.resetListener();
} }

View file

@ -354,8 +354,6 @@ public interface ISettings extends IConf {
String getItemDbType(); String getItemDbType();
boolean isForceEnableRecipe();
boolean allowOldIdSigns(); boolean allowOldIdSigns();
boolean isWaterSafe(); boolean isWaterSafe();

View file

@ -576,7 +576,6 @@ public class Settings implements net.ess3.api.ISettings {
isCompassTowardsHomePerm = _isCompassTowardsHomePerm(); isCompassTowardsHomePerm = _isCompassTowardsHomePerm();
isAllowWorldInBroadcastworld = _isAllowWorldInBroadcastworld(); isAllowWorldInBroadcastworld = _isAllowWorldInBroadcastworld();
itemDbType = _getItemDbType(); itemDbType = _getItemDbType();
forceEnableRecipe = _isForceEnableRecipe();
allowOldIdSigns = _allowOldIdSigns(); allowOldIdSigns = _allowOldIdSigns();
isWaterSafe = _isWaterSafe(); isWaterSafe = _isWaterSafe();
isSafeUsermap = _isSafeUsermap(); isSafeUsermap = _isSafeUsermap();
@ -1639,15 +1638,6 @@ public class Settings implements net.ess3.api.ISettings {
private boolean forceEnableRecipe; // https://github.com/EssentialsX/Essentials/issues/1397 private boolean forceEnableRecipe; // https://github.com/EssentialsX/Essentials/issues/1397
private boolean _isForceEnableRecipe() {
return config.getBoolean("force-enable-recipe", false);
}
@Override
public boolean isForceEnableRecipe() {
return forceEnableRecipe;
}
private boolean allowOldIdSigns; private boolean allowOldIdSigns;
private boolean _allowOldIdSigns() { private boolean _allowOldIdSigns() {

View file

@ -26,18 +26,19 @@ public class Commandrecipe extends EssentialsCommand {
public Commandrecipe() { public Commandrecipe() {
super("recipe"); super("recipe");
} }
private void disableCommandForVersion1_12() throws Exception {
VersionUtil.BukkitVersion version = VersionUtil.getServerBukkitVersion();
if (version.isHigherThanOrEqualTo(VersionUtil.v1_12_0_R01)
&& !ess.getSettings().isForceEnableRecipe()) {
throw new Exception("Please use the recipe book in your inventory.");
}
}
@Override @Override
public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception {
disableCommandForVersion1_12(); // On versions at or above 1.12, we need recipe book API
if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_12_0_R01)) {
try {
Class.forName("com.destroystokyo.paper.event.player.PlayerRecipeBookClickEvent");
} catch (ClassNotFoundException e) {
sender.sendMessage(tl("unsupportedFeature"));
return;
}
}
if (args.length < 1) { if (args.length < 1) {
throw new NotEnoughArgumentsException(); throw new NotEnoughArgumentsException();
} }

View file

@ -0,0 +1,14 @@
package net.ess3.provider;
import org.bukkit.event.Event;
import org.bukkit.event.Listener;
import java.util.function.Consumer;
public abstract class ProviderListener implements Provider, Listener {
protected Consumer<Event> function;
public ProviderListener(Consumer<Event> function) {
this.function = function;
}
}

View file

@ -0,0 +1,24 @@
package net.ess3.provider.providers;
import com.destroystokyo.paper.event.player.PlayerRecipeBookClickEvent;
import net.ess3.provider.ProviderListener;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import java.util.function.Consumer;
public class PaperRecipeBookListener extends ProviderListener {
public PaperRecipeBookListener(Consumer<Event> function) {
super(function);
}
@EventHandler
public void onPlayerRecipeBookClick(PlayerRecipeBookClickEvent event) {
function.accept(event);
}
@Override
public String getDescription() {
return "Paper Player Recipe Book Click Event Provider";
}
}