From 3fa16414d0e002db18e36e6ecabe741b18de3651 Mon Sep 17 00:00:00 2001 From: Sn0wStorm Date: Sun, 8 Nov 2020 01:50:17 +0100 Subject: [PATCH] Store the item loaders on the plugin instance --- src/com/dre/brewery/BIngredients.java | 4 +-- src/com/dre/brewery/P.java | 36 ++++++++++++++++++++-- src/com/dre/brewery/filedata/BData.java | 5 --- src/com/dre/brewery/recipe/CustomItem.java | 5 +-- src/com/dre/brewery/recipe/Ingredient.java | 27 ---------------- src/com/dre/brewery/recipe/PluginItem.java | 5 +-- src/com/dre/brewery/recipe/SimpleItem.java | 4 +-- 7 files changed, 44 insertions(+), 42 deletions(-) diff --git a/src/com/dre/brewery/BIngredients.java b/src/com/dre/brewery/BIngredients.java index fa9d141..f36e04a 100644 --- a/src/com/dre/brewery/BIngredients.java +++ b/src/com/dre/brewery/BIngredients.java @@ -471,11 +471,11 @@ public class BIngredients { List ing = new ArrayList<>(size); for (; size > 0; size--) { ItemLoader itemLoader = new ItemLoader(dataVersion, in, in.readUTF()); - if (!Ingredient.LOADERS.containsKey(itemLoader.getSaveID())) { + if (!P.p.ingredientLoaders.containsKey(itemLoader.getSaveID())) { P.p.errorLog("Ingredient Loader not found: " + itemLoader.getSaveID()); break; } - Ingredient loaded = Ingredient.LOADERS.get(itemLoader.getSaveID()).apply(itemLoader); + Ingredient loaded = P.p.ingredientLoaders.get(itemLoader.getSaveID()).apply(itemLoader); int amount = in.readShort(); if (loaded != null) { loaded.setAmount(amount); diff --git a/src/com/dre/brewery/P.java b/src/com/dre/brewery/P.java index 3f5c5a0..555f269 100644 --- a/src/com/dre/brewery/P.java +++ b/src/com/dre/brewery/P.java @@ -9,8 +9,7 @@ import com.dre.brewery.integration.ChestShopListener; import com.dre.brewery.integration.IntegrationListener; import com.dre.brewery.integration.barrel.LogBlockBarrel; import com.dre.brewery.listeners.*; -import com.dre.brewery.recipe.BCauldronRecipe; -import com.dre.brewery.recipe.BRecipe; +import com.dre.brewery.recipe.*; import com.dre.brewery.utility.BUtil; import com.dre.brewery.utility.LegacyUtil; import org.apache.commons.lang.math.NumberUtils; @@ -28,6 +27,7 @@ import java.sql.SQLException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.function.Function; public class P extends JavaPlugin { public static P p; @@ -47,6 +47,9 @@ public class P extends JavaPlugin { public WorldListener worldListener; public IntegrationListener integrationListener; + // Registrations + public Map> ingredientLoaders = new HashMap<>(); + // Language public String language; public LanguageReader languageReader; @@ -95,6 +98,13 @@ public class P extends JavaPlugin { getServer().getPluginManager().disablePlugin(this); return; } + + // Register Item Loaders + CustomItem.registerItemLoader(this); + SimpleItem.registerItemLoader(this); + PluginItem.registerItemLoader(this); + + // Read data files BData.readData(); // Setup Metrics @@ -240,6 +250,28 @@ public class P extends JavaPlugin { } } + /** + * For loading ingredients from ItemMeta. + *

Register a Static function that takes an ItemLoader, containing a DataInputStream. + *

Using the Stream it constructs a corresponding Ingredient for the chosen SaveID + * + * @param saveID The SaveID should be a small identifier like "AB" + * @param loadFct The Static Function that loads the Item, i.e. + * public static AItem loadFrom(ItemLoader loader) + */ + public void registerForItemLoader(String saveID, Function loadFct) { + ingredientLoaders.put(saveID, loadFct); + } + + /** + * Unregister the ItemLoader + * + * @param saveID the chosen SaveID + */ + public void unRegisterItemLoader(String saveID) { + ingredientLoaders.remove(saveID); + } + public static P getInstance() { return p; } diff --git a/src/com/dre/brewery/filedata/BData.java b/src/com/dre/brewery/filedata/BData.java index bd3d864..7596c9b 100644 --- a/src/com/dre/brewery/filedata/BData.java +++ b/src/com/dre/brewery/filedata/BData.java @@ -75,11 +75,6 @@ public class BData { } } - // Register Item Loaders - CustomItem.registerItemLoader(); - SimpleItem.registerItemLoader(); - PluginItem.registerItemLoader(); - // loading Ingredients into ingMap // Only for Legacy Brews Map ingMap = new HashMap<>(); diff --git a/src/com/dre/brewery/recipe/CustomItem.java b/src/com/dre/brewery/recipe/CustomItem.java index 9ec3d30..ed4e0cd 100644 --- a/src/com/dre/brewery/recipe/CustomItem.java +++ b/src/com/dre/brewery/recipe/CustomItem.java @@ -1,5 +1,6 @@ package com.dre.brewery.recipe; +import com.dre.brewery.P; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -285,7 +286,7 @@ public class CustomItem extends RecipeItem implements Ingredient { } // Needs to be called at Server start - public static void registerItemLoader() { - Ingredient.registerForItemLoader("CI", CustomItem::loadFrom); + public static void registerItemLoader(P p) { + p.registerForItemLoader("CI", CustomItem::loadFrom); } } diff --git a/src/com/dre/brewery/recipe/Ingredient.java b/src/com/dre/brewery/recipe/Ingredient.java index 3d27118..60cede4 100644 --- a/src/com/dre/brewery/recipe/Ingredient.java +++ b/src/com/dre/brewery/recipe/Ingredient.java @@ -4,9 +4,6 @@ import org.bukkit.inventory.ItemStack; import java.io.DataOutputStream; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; /** * Item used in a BIngredients, inside BCauldron or Brew, @@ -17,30 +14,6 @@ import java.util.function.Function; */ public interface Ingredient { - Map> LOADERS = new HashMap<>(); - - /** - * Register a Static function as function that takes an ItemLoader, containing a DataInputStream. - *

Using the Stream it constructs a corresponding Ingredient for the chosen SaveID - * - * @param saveID The SaveID should be a small identifier like "AB" - * @param loadFct The Static Function that loads the Item, i.e. - * public static AItem loadFrom(ItemLoader loader) - */ - static void registerForItemLoader(String saveID, Function loadFct) { - LOADERS.put(saveID, loadFct); - } - - /** - * Unregister the ItemLoader - * - * @param saveID the chosen SaveID - */ - static void unRegisterItemLoader(String saveID) { - LOADERS.remove(saveID); - } - - /** * Saves this Ingredient to the DataOutputStream. *

The first data HAS to be storing the SaveID like: diff --git a/src/com/dre/brewery/recipe/PluginItem.java b/src/com/dre/brewery/recipe/PluginItem.java index 3a02a1a..1e126a2 100644 --- a/src/com/dre/brewery/recipe/PluginItem.java +++ b/src/com/dre/brewery/recipe/PluginItem.java @@ -1,5 +1,6 @@ package com.dre.brewery.recipe; +import com.dre.brewery.P; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -164,8 +165,8 @@ public abstract class PluginItem extends RecipeItem implements Ingredient { * Registers the chosen SaveID and the loading Method for loading from Brew or BCauldron. *

Needs to be called at Server start. */ - public static void registerItemLoader() { - Ingredient.registerForItemLoader("PI", PluginItem::loadFrom); + public static void registerItemLoader(P p) { + p.registerForItemLoader("PI", PluginItem::loadFrom); } diff --git a/src/com/dre/brewery/recipe/SimpleItem.java b/src/com/dre/brewery/recipe/SimpleItem.java index 80f984c..fa1569e 100644 --- a/src/com/dre/brewery/recipe/SimpleItem.java +++ b/src/com/dre/brewery/recipe/SimpleItem.java @@ -144,8 +144,8 @@ public class SimpleItem extends RecipeItem implements Ingredient { } // Needs to be called at Server start - public static void registerItemLoader() { - Ingredient.registerForItemLoader("SI", SimpleItem::loadFrom); + public static void registerItemLoader(P p) { + p.registerForItemLoader("SI", SimpleItem::loadFrom); } }