diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index bc9327bbd8d..d59716eaba9 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -41,6 +41,7 @@ import net.ess3.nms.refl.providers.ReflServerStateProvider; import net.ess3.nms.refl.providers.ReflSpawnEggProvider; import net.ess3.provider.PotionMetaProvider; +import net.ess3.provider.ProviderListener; import net.ess3.provider.ServerStateProvider; import net.ess3.provider.SpawnEggProvider; import net.ess3.provider.SpawnerProvider; @@ -51,10 +52,12 @@ import org.bukkit.block.Block; import org.bukkit.command.*; import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.world.WorldLoadEvent; 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 PotionMetaProvider potionMetaProvider; private transient ServerStateProvider serverStateProvider; + private transient ProviderListener recipeBookEventProvider; private transient Kits kits; public Essentials() { @@ -148,7 +152,7 @@ public void setupForTesting(final Server server) throws IOException, InvalidDesc i18n.onEnable(); i18n.updateLocale("en"); Console.setInstance(this); - + LOGGER.log(Level.INFO, tl("usingTempFolderForTesting")); LOGGER.log(Level.INFO, dataFolder.toString()); settings = new Settings(this); @@ -172,7 +176,7 @@ public void onEnable() { i18n = new I18n(this); i18n.onEnable(); execTimer.mark("I18n1"); - + Console.setInstance(this); if (!VersionUtil.isServerSupported()) { @@ -269,6 +273,18 @@ public void onEnable() { 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)"); reload(); @@ -362,6 +378,10 @@ private void registerListeners(PluginManager pm) { pm.registerEvents(tntListener, this); + if (recipeBookEventProvider != null) { + pm.registerEvents(recipeBookEventProvider, this); + } + jails.resetListener(); } diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 7fa544f83c5..71fee2551c6 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -354,8 +354,6 @@ enum KeepInvPolicy { String getItemDbType(); - boolean isForceEnableRecipe(); - boolean allowOldIdSigns(); boolean isWaterSafe(); diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 5fb42dacf81..0c2d438acf7 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -563,7 +563,6 @@ public void reloadConfig() { isCompassTowardsHomePerm = _isCompassTowardsHomePerm(); isAllowWorldInBroadcastworld = _isAllowWorldInBroadcastworld(); itemDbType = _getItemDbType(); - forceEnableRecipe = _isForceEnableRecipe(); allowOldIdSigns = _allowOldIdSigns(); isWaterSafe = _isWaterSafe(); isSafeUsermap = _isSafeUsermap(); @@ -1626,15 +1625,6 @@ public String getItemDbType() { 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() { diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandrecipe.java b/Essentials/src/com/earth2me/essentials/commands/Commandrecipe.java index 31de149e467..0d592040f0f 100755 --- a/Essentials/src/com/earth2me/essentials/commands/Commandrecipe.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandrecipe.java @@ -26,18 +26,19 @@ public class Commandrecipe extends EssentialsCommand { public Commandrecipe() { 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 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) { throw new NotEnoughArgumentsException(); } diff --git a/providers/BaseProviders/src/net/ess3/provider/ProviderListener.java b/providers/BaseProviders/src/net/ess3/provider/ProviderListener.java new file mode 100644 index 00000000000..0750e87b77e --- /dev/null +++ b/providers/BaseProviders/src/net/ess3/provider/ProviderListener.java @@ -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 function; + + public ProviderListener(Consumer function) { + this.function = function; + } +} diff --git a/providers/PaperProvider/src/net/ess3/provider/providers/PaperRecipeBookListener.java b/providers/PaperProvider/src/net/ess3/provider/providers/PaperRecipeBookListener.java new file mode 100644 index 00000000000..217b3eca2dd --- /dev/null +++ b/providers/PaperProvider/src/net/ess3/provider/providers/PaperRecipeBookListener.java @@ -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 function) { + super(function); + } + + @EventHandler + public void onPlayerRecipeBookClick(PlayerRecipeBookClickEvent event) { + function.accept(event); + } + + @Override + public String getDescription() { + return "Paper Player Recipe Book Click Event Provider"; + } +}