mirror of
https://github.com/TotalFreedomMC/TF-EssentialsX.git
synced 2025-08-03 19:15:44 +00:00
Fix recipe command on Paper (#3404)
This commit is contained in:
parent
9c487b0aac
commit
024c56efdd
6 changed files with 70 additions and 23 deletions
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -354,8 +354,6 @@ public interface ISettings extends IConf {
|
||||||
|
|
||||||
String getItemDbType();
|
String getItemDbType();
|
||||||
|
|
||||||
boolean isForceEnableRecipe();
|
|
||||||
|
|
||||||
boolean allowOldIdSigns();
|
boolean allowOldIdSigns();
|
||||||
|
|
||||||
boolean isWaterSafe();
|
boolean isWaterSafe();
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue