diff --git a/eco-api/src/main/java/com/willfp/eco/core/Eco.java b/eco-api/src/main/java/com/willfp/eco/core/Eco.java index 70ca19dd6..2deafb02d 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/Eco.java +++ b/eco-api/src/main/java/com/willfp/eco/core/Eco.java @@ -135,6 +135,14 @@ public interface Eco { @NotNull Logger createLogger(@NotNull EcoPlugin plugin); + /** + * Get NOOP logger. + * + * @return The logger. + */ + @NotNull + Logger getNOOPLogger(); + /** * Create a PAPI integration. * diff --git a/eco-api/src/main/java/com/willfp/eco/core/EcoPlugin.java b/eco-api/src/main/java/com/willfp/eco/core/EcoPlugin.java index e2f946615..8cfb048a7 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/EcoPlugin.java +++ b/eco-api/src/main/java/com/willfp/eco/core/EcoPlugin.java @@ -126,7 +126,7 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike, Regist /** * The logger for the plugin. */ - private final Logger logger; + private Logger logger; /** * If the server is running an outdated version of the plugin. @@ -425,7 +425,18 @@ public final void onEnable() { this.loadPluginCommands().forEach(PluginCommand::register); - this.getScheduler().runLater(this::afterLoad, 1); + // Run preliminary reload to resolve load order issues + this.getScheduler().runLater(() -> { + Logger before = this.getLogger(); + // Temporary silence logger. + this.logger = Eco.get().getNOOPLogger(); + + this.reload(false); + + this.logger = before; + }, 1); + + this.getScheduler().runLater(this::afterLoad, 2); if (this.isSupportingExtensions()) { this.getExtensionLoader().loadExtensions(); @@ -601,9 +612,18 @@ public final void afterLoad(@NotNull final LifecyclePosition position, * Reload the plugin. */ public final void reload() { + this.reload(true); + } + + /** + * Reload the plugin. + * + * @param cancelTasks If tasks should be cancelled. + */ + public final void reload(final boolean cancelTasks) { this.getConfigHandler().updateConfigs(); - if (this.cancelsTasksOnReload()) { + if (cancelTasks) { this.getScheduler().cancelAll(); } @@ -1163,15 +1183,6 @@ public boolean isUsingLocalStorage() { return this.configYml.isUsingLocalStorage(); } - /** - * Get if all tasks should be cancelled on reload. - * - * @return If cancelling tasks on reload. - */ - public boolean cancelsTasksOnReload() { - return true; - } - @Override @NotNull public final String getID() { diff --git a/eco-api/src/main/java/com/willfp/eco/core/items/CustomItem.java b/eco-api/src/main/java/com/willfp/eco/core/items/CustomItem.java index 252a2d27f..6c9d9c3ff 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/items/CustomItem.java +++ b/eco-api/src/main/java/com/willfp/eco/core/items/CustomItem.java @@ -1,7 +1,6 @@ package com.willfp.eco.core.items; import com.willfp.eco.core.Eco; -import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -55,7 +54,7 @@ public CustomItem(@NotNull final NamespacedKey key, */ Eco.get().getEcoPlugin().getScheduler().runLater(() -> { if (!matches(getItem())) { - Bukkit.getLogger().severe("Item with key " + key + " is invalid!"); + Eco.get().getEcoPlugin().getLogger().severe("Item with key " + key + " is invalid!"); } }, 1); } diff --git a/eco-api/src/main/java/com/willfp/eco/core/recipe/Recipes.java b/eco-api/src/main/java/com/willfp/eco/core/recipe/Recipes.java index c0f46a1ab..39b4c0a32 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/recipe/Recipes.java +++ b/eco-api/src/main/java/com/willfp/eco/core/recipe/Recipes.java @@ -9,7 +9,6 @@ import com.willfp.eco.core.recipe.recipes.CraftingRecipe; import com.willfp.eco.core.recipe.recipes.ShapedCraftingRecipe; import com.willfp.eco.util.NamespacedKeyUtils; -import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -127,8 +126,8 @@ public static CraftingRecipe createAndRegisterRecipe(@NotNull final EcoPlugin pl } if (builder.isAir()) { - Bukkit.getLogger().warning("Crafting recipe " + plugin.getID() + ":" + key + " consists only"); - Bukkit.getLogger().warning("of air or invalid items! It will not be registered."); + plugin.getLogger().warning("Crafting recipe " + plugin.getID() + ":" + key + " consists only"); + plugin.getLogger().warning("of air or invalid items! It will not be registered."); return null; } diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/logging/NOOPLogger.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/logging/NOOPLogger.kt new file mode 100644 index 000000000..cfbb4e0fc --- /dev/null +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/logging/NOOPLogger.kt @@ -0,0 +1,10 @@ +package com.willfp.eco.internal.logging + +import java.util.logging.LogRecord +import java.util.logging.Logger + +object NOOPLogger : Logger("eco_noop", null as String?) { + override fun log(record: LogRecord?) { + return + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoImpl.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoImpl.kt index 8bf8d79fd..cced2b0e4 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoImpl.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoImpl.kt @@ -37,6 +37,7 @@ import com.willfp.eco.internal.gui.menu.renderedInventory import com.willfp.eco.internal.gui.slot.EcoSlotBuilder import com.willfp.eco.internal.integrations.PAPIExpansion import com.willfp.eco.internal.logging.EcoLogger +import com.willfp.eco.internal.logging.NOOPLogger import com.willfp.eco.internal.placeholder.PlaceholderParser import com.willfp.eco.internal.proxy.EcoProxyFactory import com.willfp.eco.internal.scheduling.EcoScheduler @@ -125,6 +126,9 @@ class EcoImpl : EcoSpigotPlugin(), Eco { override fun createLogger(plugin: EcoPlugin) = EcoLogger(plugin) + override fun getNOOPLogger() = + NOOPLogger + override fun createPAPIIntegration(plugin: EcoPlugin) { PAPIExpansion(plugin) }