From aad0ee5778c152a1810ff7487c1233c29df51e64 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Mon, 30 Dec 2024 09:09:35 -0500 Subject: [PATCH] review concerns --- .../com/earth2me/essentials/Essentials.java | 21 +++++++++---------- .../earth2me/essentials/ProviderFactory.java | 11 ++++++---- .../earth2me/essentials/RandomTeleport.java | 2 +- .../net/ess3/provider/BiomeKeyProvider.java | 2 ++ .../net/ess3/provider/ContainerProvider.java | 2 ++ .../ess3/provider/SerializationProvider.java | 2 ++ .../net/ess3/provider/SignDataProvider.java | 2 ++ .../providers/NullableProvider.java | 14 +++++++++++++ 8 files changed, 40 insertions(+), 16 deletions(-) create mode 100644 providers/BaseProviders/src/main/java/net/essentialsx/providers/NullableProvider.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index e05cd0d72..2ae888dec 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -432,6 +432,9 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { ((Cancellable) event).setCancelled(true); } }); + if (getSettings().isDebug()) { + LOGGER.log(Level.INFO, "Registered Paper Recipe Book Event Listener"); + } } catch (final ClassNotFoundException ignored) { } } @@ -439,7 +442,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { execTimer.mark("Init(Providers)"); reload(); - // The item spawn blacklist is loaded with all other settings, before the item\ + // The item spawn blacklist is loaded with all other settings, before the item // DB, but it depends on the item DB, so we need to reload it again here: ((Settings) settings)._lateLoadItemSpawnBlacklist(); backup = new Backup(this); @@ -667,11 +670,9 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { // Check for disabled commands if (getSettings().isCommandDisabled(commandLabel)) { - if (provider(KnownCommandsProvider.class).getKnownCommands().containsKey(commandLabel)) { - final Command newCmd = provider(KnownCommandsProvider.class).getKnownCommands().get(commandLabel); - if (!(newCmd instanceof PluginIdentifiableCommand) || ((PluginIdentifiableCommand) newCmd).getPlugin() != this) { - return newCmd.tabComplete(cSender, commandLabel, args); - } + final Command newCmd = provider(KnownCommandsProvider.class).getKnownCommands().get(commandLabel); + if (newCmd != null && (!(newCmd instanceof PluginIdentifiableCommand) || ((PluginIdentifiableCommand) newCmd).getPlugin() != this)) { + return newCmd.tabComplete(cSender, commandLabel, args); } return Collections.emptyList(); } @@ -778,11 +779,9 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { // Check for disabled commands if (getSettings().isCommandDisabled(commandLabel)) { - if (provider(KnownCommandsProvider.class).getKnownCommands().containsKey(commandLabel)) { - final Command newCmd = provider(KnownCommandsProvider.class).getKnownCommands().get(commandLabel); - if (!(newCmd instanceof PluginIdentifiableCommand) || !isEssentialsPlugin(((PluginIdentifiableCommand) newCmd).getPlugin())) { - return newCmd.execute(cSender, commandLabel, args); - } + final Command newCmd = provider(KnownCommandsProvider.class).getKnownCommands().get(commandLabel); + if (newCmd != null && (!(newCmd instanceof PluginIdentifiableCommand) || !isEssentialsPlugin(((PluginIdentifiableCommand) newCmd).getPlugin()))) { + return newCmd.execute(cSender, commandLabel, args); } sender.sendTl("commandDisabled", commandLabel); return true; diff --git a/Essentials/src/main/java/com/earth2me/essentials/ProviderFactory.java b/Essentials/src/main/java/com/earth2me/essentials/ProviderFactory.java index 1521ba697..80de68734 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ProviderFactory.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ProviderFactory.java @@ -2,6 +2,7 @@ package com.earth2me.essentials; import io.papermc.lib.PaperLib; import net.ess3.provider.Provider; +import net.essentialsx.providers.NullableProvider; import net.essentialsx.providers.ProviderData; import net.essentialsx.providers.ProviderTest; import org.bukkit.plugin.Plugin; @@ -55,6 +56,7 @@ public class ProviderFactory { public void finalizeRegistration() { for (final Map.Entry, List>> entry : registeredProviders.entrySet()) { final Class providerClass = entry.getKey(); + final boolean nullable = providerClass.isAnnotationPresent(NullableProvider.class); Class highestProvider = null; ProviderData highestProviderData = null; int highestWeight = -1; @@ -70,12 +72,13 @@ public class ProviderFactory { essentials.getLogger().log(Level.SEVERE, "Failed to initialize provider " + provider.getName(), e); } } - if (highestProvider == null) { + + if (highestProvider != null) { + essentials.getLogger().info("Selected " + highestProviderData.description() + " as the provider for " + providerClass.getSimpleName()); + providers.put(providerClass, getProviderInstance(highestProvider)); + } else if (!nullable) { throw new IllegalStateException("No provider found for " + providerClass.getName()); } - - essentials.getLogger().info("Selected " + highestProviderData.description() + " as the provider for " + providerClass.getSimpleName()); - providers.put(providerClass, getProviderInstance(highestProvider)); } registeredProviders.clear(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java index 9541c79fa..163e76dca 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java @@ -35,7 +35,7 @@ public class RandomTeleport implements IConf { public RandomTeleport(final IEssentials essentials) { this.ess = essentials; config = new EssentialsConfiguration(new File(essentials.getDataFolder(), "tpr.yml"), "/tpr.yml", - "Configuration for the random teleport command.\nSome settings may be defaulted, and can be changed via the /settpr command in-game."); + "Configuration for the random teleport command.\nUse the /settpr command in-game to set random teleport locations."); } public EssentialsConfiguration getConfig() { diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/BiomeKeyProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/BiomeKeyProvider.java index 94ee756fc..fff7290b0 100644 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/BiomeKeyProvider.java +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/BiomeKeyProvider.java @@ -1,8 +1,10 @@ package net.ess3.provider; +import net.essentialsx.providers.NullableProvider; import org.bukkit.NamespacedKey; import org.bukkit.block.Block; +@NullableProvider public interface BiomeKeyProvider extends Provider { NamespacedKey getBiomeKey(Block block); } diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/ContainerProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/ContainerProvider.java index f1d886335..cb8654a99 100644 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/ContainerProvider.java +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/ContainerProvider.java @@ -1,8 +1,10 @@ package net.ess3.provider; +import net.essentialsx.providers.NullableProvider; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryView; +@NullableProvider public interface ContainerProvider extends Provider { InventoryView openAnvil(Player player); diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/SerializationProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/SerializationProvider.java index 252af46be..6ccaf9486 100644 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/SerializationProvider.java +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/SerializationProvider.java @@ -1,7 +1,9 @@ package net.ess3.provider; +import net.essentialsx.providers.NullableProvider; import org.bukkit.inventory.ItemStack; +@NullableProvider public interface SerializationProvider extends Provider { byte[] serializeItem(ItemStack stack); diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/SignDataProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/SignDataProvider.java index f84c85144..d4215d6b7 100644 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/SignDataProvider.java +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/SignDataProvider.java @@ -1,7 +1,9 @@ package net.ess3.provider; +import net.essentialsx.providers.NullableProvider; import org.bukkit.block.Sign; +@NullableProvider public interface SignDataProvider extends Provider { void setSignData(Sign sign, String key, String value); diff --git a/providers/BaseProviders/src/main/java/net/essentialsx/providers/NullableProvider.java b/providers/BaseProviders/src/main/java/net/essentialsx/providers/NullableProvider.java new file mode 100644 index 000000000..32d860694 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/essentialsx/providers/NullableProvider.java @@ -0,0 +1,14 @@ +package net.essentialsx.providers; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marks a provider as nullable, meaning that an error will not be thrown if no provider is found for the given type. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface NullableProvider { +}