diff --git a/lib/MMOItems Premium.jar b/lib/MMOItems.jar
similarity index 100%
rename from lib/MMOItems Premium.jar
rename to lib/MMOItems.jar
diff --git a/pom.xml b/pom.xml
index 6af94ce3..0b6d61a7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,14 +59,14 @@
spigot-repo
https://hub.spigotmc.org/nexus/content/repositories/snapshots/
-
- sk89q-repo
- https://maven.enginehub.org/repo/
-
-
- placeholderapi
- http://repo.extendedclip.com/content/repositories/placeholderapi/
-
+
+ sk89q-repo
+ https://maven.enginehub.org/repo/
+
+
+ placeholderapi
+ http://repo.extendedclip.com/content/repositories/placeholderapi/
+
@@ -85,9 +85,9 @@
net.Indyuce
MMOItems
- 4.7.14
+ 5.1.2
system
- ${basedir}/lib/MMOItems Premium.jar
+ ${basedir}/lib/MMOItems.jar
com.nisovin
diff --git a/src/main/java/net/Indyuce/mmocore/MMOCore.java b/src/main/java/net/Indyuce/mmocore/MMOCore.java
index 375f2855..7fa769ec 100644
--- a/src/main/java/net/Indyuce/mmocore/MMOCore.java
+++ b/src/main/java/net/Indyuce/mmocore/MMOCore.java
@@ -40,7 +40,6 @@ import net.Indyuce.mmocore.comp.holograms.CMIPlugin;
import net.Indyuce.mmocore.comp.holograms.HologramSupport;
import net.Indyuce.mmocore.comp.holograms.HologramsPlugin;
import net.Indyuce.mmocore.comp.holograms.HolographicDisplaysPlugin;
-import net.Indyuce.mmocore.comp.mmoitems.MMOItemsMMOLoader;
import net.Indyuce.mmocore.comp.mythicmobs.MythicMobsDrops;
import net.Indyuce.mmocore.comp.mythicmobs.MythicMobsMMOLoader;
import net.Indyuce.mmocore.comp.placeholder.DefaultParser;
@@ -140,9 +139,6 @@ public class MMOCore extends JavaPlugin {
/*
* register extra objective, drop items...
*/
- if (Bukkit.getPluginManager().getPlugin("MMOItems") != null)
- loadManager.registerLoader(new MMOItemsMMOLoader());
-
if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null)
loadManager.registerLoader(new WorldGuardMMOLoader());
diff --git a/src/main/java/net/Indyuce/mmocore/api/experience/source/MineMIBlockExperienceSource.java b/src/main/java/net/Indyuce/mmocore/api/experience/source/MineMIBlockExperienceSource.java
deleted file mode 100644
index 5566f49e..00000000
--- a/src/main/java/net/Indyuce/mmocore/api/experience/source/MineMIBlockExperienceSource.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package net.Indyuce.mmocore.api.experience.source;
-
-import org.bukkit.GameMode;
-import org.bukkit.enchantments.Enchantment;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.block.BlockBreakEvent;
-import org.bukkit.inventory.ItemStack;
-
-import net.Indyuce.mmocore.api.experience.Profession;
-import net.Indyuce.mmocore.api.experience.source.type.SpecificExperienceSource;
-import net.Indyuce.mmocore.api.load.MMOLineConfig;
-import net.Indyuce.mmocore.api.player.PlayerData;
-import net.Indyuce.mmocore.manager.profession.ExperienceManager;
-import net.Indyuce.mmoitems.MMOItems;
-import net.Indyuce.mmoitems.api.CustomBlock;
-
-public class MineMIBlockExperienceSource extends SpecificExperienceSource {
- public final int id;
- private final boolean silkTouch;
- private final boolean playerPlaced;
-
- public MineMIBlockExperienceSource(Profession profession, MMOLineConfig config) {
- super(profession, config);
-
- config.validate("id");
- id = config.getInt("id", 1);
- silkTouch = config.getBoolean("silk-touch", true);
- playerPlaced = config.getBoolean("player-placed", false);
- }
-
- @Override
- public ExperienceManager newManager() {
- return new ExperienceManager() {
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void a(BlockBreakEvent event) {
- if (event.isCancelled() || event.getPlayer().getGameMode() != GameMode.SURVIVAL)
- return;
- PlayerData data = PlayerData.get(event.getPlayer());
-
- for (MineMIBlockExperienceSource source : getSources())
- {
- if (!MMOItems.plugin.getCustomBlocks().isMushroomBlock(event.getBlock().getType()))
- continue;
- if (source.silkTouch && hasSilkTouch(event.getPlayer().getInventory().getItemInMainHand()))
- continue;
- if ((!source.playerPlaced) && event.getBlock().hasMetadata("player_placed"))
- continue;
-
- if (source.matches(data, CustomBlock.getFromData(event.getBlock().getBlockData()).getId()))
- source.giveExperience(data, event.getBlock().getLocation());
- }
- }
- };
- }
-
- private boolean hasSilkTouch(ItemStack item) {
- return item != null && item.hasItemMeta() && item.getItemMeta().hasEnchant(Enchantment.SILK_TOUCH);
- }
-
- @Override
- public boolean matches(PlayerData player, Integer blockId) {
- return id == blockId && hasRightClass(player);
- }
-}
diff --git a/src/main/java/net/Indyuce/mmocore/comp/mmoitems/MMOItemsMMOLoader.java b/src/main/java/net/Indyuce/mmocore/comp/mmoitems/MMOItemsMMOLoader.java
deleted file mode 100644
index 921536b7..00000000
--- a/src/main/java/net/Indyuce/mmocore/comp/mmoitems/MMOItemsMMOLoader.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package net.Indyuce.mmocore.comp.mmoitems;
-
-import org.bukkit.configuration.ConfigurationSection;
-
-import net.Indyuce.mmocore.api.droptable.condition.Condition;
-import net.Indyuce.mmocore.api.droptable.dropitem.DropItem;
-import net.Indyuce.mmocore.api.experience.Profession;
-import net.Indyuce.mmocore.api.experience.source.MineMIBlockExperienceSource;
-import net.Indyuce.mmocore.api.experience.source.type.ExperienceSource;
-import net.Indyuce.mmocore.api.load.MMOLineConfig;
-import net.Indyuce.mmocore.api.load.MMOLoader;
-import net.Indyuce.mmocore.api.quest.objective.Objective;
-import net.Indyuce.mmocore.api.quest.trigger.Trigger;
-
-public class MMOItemsMMOLoader implements MMOLoader {
-
- @Override
- public Condition loadCondition(MMOLineConfig config) {
- return null;
- }
-
- @Override
- public Trigger loadTrigger(MMOLineConfig config) {
- return null;
- }
-
- @Override
- public DropItem loadDropItem(MMOLineConfig config) {
- return null;
- }
-
- @Override
- public Objective loadObjective(MMOLineConfig config, ConfigurationSection section) {
- return null;
- }
-
- @Override
- public ExperienceSource> loadExperienceSource(MMOLineConfig config, Profession profession) {
- if (config.getKey().equals("minemiblock"))
- return new MineMIBlockExperienceSource(profession, config);
-
- return null;
- }
-}
diff --git a/src/main/java/net/Indyuce/mmocore/listener/profession/Alchemy.java b/src/main/java/net/Indyuce/mmocore/listener/profession/Alchemy.java
deleted file mode 100644
index ad35e1f0..00000000
--- a/src/main/java/net/Indyuce/mmocore/listener/profession/Alchemy.java
+++ /dev/null
@@ -1,351 +0,0 @@
-package net.Indyuce.mmocore.listener.profession;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.Particle;
-import org.bukkit.Sound;
-import org.bukkit.block.Block;
-import org.bukkit.block.BrewingStand;
-import org.bukkit.configuration.ConfigurationSection;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.event.inventory.InventoryType;
-import org.bukkit.inventory.BrewerInventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.PotionMeta;
-import org.bukkit.scheduler.BukkitRunnable;
-
-import net.Indyuce.mmocore.MMOCore;
-import net.Indyuce.mmocore.api.player.PlayerData;
-import net.Indyuce.mmoitems.MMOItems;
-import net.Indyuce.mmoitems.api.Type;
-import net.mmogroup.mmolib.api.item.NBTItem;
-
-public class Alchemy implements Listener {
- private Set runnables = new HashSet<>();
-
- private static Set recipes = new HashSet<>();
-
- public Alchemy(ConfigurationSection config) {
- Alchemy.recipes.clear();
- for (String key : config.getKeys(false)) {
- BrewingRecipe recipe = new BrewingRecipe(config.getConfigurationSection(key));
- if (recipe.isValid())
- recipes.add(recipe);
- }
- }
-
- /*
- * force place the item in the brewing stand inventory so it can start the
- * recipe.
- */
- @EventHandler
- public void a(InventoryClickEvent event) {
- if (event.getInventory().getType() != InventoryType.BREWING)
- return;
-
- event.setCancelled(true);
- ItemStack item = event.getCurrentItem();
- if (item == null || item.getType() == Material.AIR)
- return;
-
- Player player = (Player) event.getWhoClicked();
- BrewingStand stand = (BrewingStand) event.getInventory().getHolder();
- BrewerInventory inv = (BrewerInventory) event.getInventory();
-
- // send ingredient back in the player inventory
- if (event.getRawSlot() == 3) {
- if (player.getInventory().firstEmpty() == -1)
- return;
-
- player.getInventory().addItem(inv.getIngredient());
- inv.setIngredient(null);
-
- player.playSound(player.getLocation(), Sound.ENTITY_ITEM_PICKUP, 1, 1);
- checkForBrewing(player, stand);
- return;
- }
-
- // send fuel back in the player inventory
- if (event.getRawSlot() == 4) {
- if (player.getInventory().firstEmpty() == -1)
- return;
-
- player.getInventory().addItem(inv.getFuel());
- inv.setFuel(null);
-
- player.playSound(player.getLocation(), Sound.ENTITY_ITEM_PICKUP, 1, 1);
- checkForBrewing(player, stand);
- return;
- }
-
- // send bottle back in the player inventory
- if (event.getRawSlot() >= 0 && event.getRawSlot() < 3) {
- if (player.getInventory().firstEmpty() == -1)
- return;
-
- player.getInventory().addItem(inv.getItem(event.getRawSlot()));
- inv.setItem(event.getRawSlot(), null);
-
- player.playSound(player.getLocation(), Sound.ENTITY_ITEM_PICKUP, 1, 1);
- checkForBrewing(player, stand);
- return;
- }
-
- BrewingRecipe recipe = getCorrespondingRecipe(NBTItem.get(item));
-
- // send fuel in the brewing stand
- if (recipe == null) {
- if (item.getType() == Material.BLAZE_POWDER && (inv.getFuel() == null || inv.getFuel().getType() == Material.AIR || item.isSimilar(inv.getFuel()))) {
- int fuel = inv.getFuel() == null ? 0 : inv.getFuel().getAmount();
- int needed = 64 - fuel;
- int sent = Math.min(needed, item.getAmount());
-
- if (sent == 0)
- return;
-
- ItemStack fuelItem = item.clone();
- fuelItem.setAmount(fuel + sent);
- inv.setFuel(fuelItem);
-
- if (sent == item.getAmount())
- event.setCurrentItem(null);
- else
- item.setAmount(item.getAmount() - sent);
-
- player.playSound(player.getLocation(), Sound.BLOCK_END_PORTAL_FRAME_FILL, 1, 2);
- checkForBrewing(player, stand);
- return;
- }
-
- // send potion in the brewing stand
- if (item.getType() == Material.POTION && ((PotionMeta) item.getItemMeta()).getCustomEffects().isEmpty()) {
- int empty = getEmptyBottleSlot(inv);
- if (empty == -1)
- return;
-
- inv.setItem(empty, event.getCurrentItem());
- event.setCurrentItem(null);
-
- player.playSound(player.getLocation(), Sound.BLOCK_END_PORTAL_FRAME_FILL, 1, 2);
- checkForBrewing(player, stand);
- }
- return;
- }
-
- // send ingredient in the brewing stand
- if (inv.getIngredient() == null || inv.getIngredient().getType() == Material.AIR || item.isSimilar(inv.getIngredient())) {
- int ingredient = inv.getIngredient() == null ? 0 : inv.getIngredient().getAmount();
- int needed = 64 - ingredient;
- int sent = Math.min(needed, item.getAmount());
-
- if (sent == 0)
- return;
-
- ItemStack ingredientItem = item.clone();
- ingredientItem.setAmount(ingredient + sent);
- inv.setIngredient(ingredientItem);
-
- if (sent == item.getAmount())
- event.setCurrentItem(null);
- else
- item.setAmount(item.getAmount() - sent);
-
- player.playSound(player.getLocation(), Sound.BLOCK_END_PORTAL_FRAME_FILL, 1, 2);
- checkForBrewing(player, stand);
- }
- }
-
- private void checkForBrewing(Player player, BrewingStand stand) {
- BrewingRecipe recipe = getCorrespondingRecipe(NBTItem.get(stand.getInventory().getIngredient()));
- Location loc = stand.getLocation();
- if (!runnables.contains(loc.getBlockY() + "-" + loc.getBlockY() + "-" + loc.getBlockZ()) && recipe != null && stand.getFuelLevel() > 0 && hasAtLeastOnePotion(stand.getInventory()))
- new BrewingRunnable(player, stand).start(recipe);
- }
-
- private int getEmptyBottleSlot(BrewerInventory inv) {
- ItemStack item;
- for (int j = 0; j < 3; j++)
- if ((item = inv.getItem(j)) == null || item.getType() == Material.AIR)
- return j;
- return -1;
- }
-
- /*
- * returns if the corresponding brewing inventory has at least ONE potion
- * and if
- */
- private boolean hasAtLeastOnePotion(BrewerInventory inv) {
- ItemStack item;
- for (int j = 0; j < 3; j++)
- if ((item = inv.getItem(j)) != null)
- return item.getType() == Material.POTION;
- return false;
- }
-
- private boolean hasNoBottle(BrewerInventory inv) {
- ItemStack item;
- for (int j = 0; j < 3; j++)
- if ((item = inv.getItem(j)) != null && item.getType() == Material.POTION)
- return false;
- return true;
- }
-
- private BrewingRecipe getCorrespondingRecipe(NBTItem item) {
- for (BrewingRecipe recipe : recipes)
- if (recipe.matchesIngredient(item))
- return recipe;
- return null;
- }
-
- private ItemStack consume(ItemStack item) {
- if (item.getAmount() < 2)
- return null;
-
- item.setAmount(item.getAmount() - 1);
- return item;
- }
-
- public class BrewingRunnable extends BukkitRunnable {
- private int time = 0;
- private Block block;
- private Location loc;
- private BrewingRecipe recipe;
- private String mapPath;
- private Player player;
-
- public BrewingRunnable(Player player, BrewingStand stand) {
- this.block = stand.getBlock();
- this.player = player;
- loc = stand.getLocation().add(.5, .5, .5);
- }
-
- public void start(BrewingRecipe recipe) {
- this.recipe = recipe;
- BrewingStand stand = (BrewingStand) block.getState();
- stand.setFuelLevel(stand.getFuelLevel() - 1);
- stand.update();
- runnables.add(mapPath = loc.getBlockY() + "-" + loc.getBlockY() + "-" + loc.getBlockZ());
- runTaskTimer(MMOCore.plugin, 1, 1);
- }
-
- @Override
- public void run() {
- BrewingStand stand = (BrewingStand) block.getState();
- stand.getWorld().spawnParticle(Particle.SPELL_MOB, loc.clone().add(Math.cos((double) time / 3.) * .4, 0, Math.sin((double) time / 3.) * .4), 0);
-
- // cancel the recipe if ingredient was changed
- if (!recipe.matchesIngredient(stand.getInventory().getIngredient()) || hasNoBottle(stand.getInventory())) {
- runnables.remove(mapPath);
- cancel();
- return;
- }
-
- if (time++ > recipe.getCookingTime()) {
- runnables.remove(mapPath);
- stand.getInventory().setIngredient(consume(stand.getInventory().getIngredient()));
-
- int count = 0;
- ItemStack item, result = recipe.getResult();
- for (int j = 0; j < 3; j++)
- if ((item = stand.getInventory().getItem(j)) != null && item.getType() != Material.AIR) {
- count++;
- stand.getInventory().setItem(j, result);
- }
-
- if (MMOCore.plugin.professionManager.has("alchemy"))
- PlayerData.get(player).getCollectionSkills().giveExperience(MMOCore.plugin.professionManager.get("alchemy"), count * recipe.experience, loc);
-
- stand.getWorld().playSound(stand.getLocation(), Sound.BLOCK_BREWING_STAND_BREW, 1, 1);
- cancel();
- return;
- }
-
- stand.setBrewingTime((int) (400. * (1. - (double) time / recipe.getCookingTime())));
- stand.update();
- }
- }
-
- public class BrewingRecipe {
-
- // ingredient
- private Type ingredientType;
- private String ingredientId;
-
- private int time, experience;
-
- // result
- private Type type;
- private String id;
-
- private boolean valid = true;
-
- public BrewingRecipe(ConfigurationSection section) {
- try {
- String[] split = section.getString("ingredient").split("\\.");
- ingredientType = MMOItems.plugin.getTypes().get(split[0]);
- ingredientId = split[1];
-
- split = section.getString("result").split("\\.");
- type = MMOItems.plugin.getTypes().get(split[0]);
- id = split[1];
-
- time = (int) (section.getDouble("cook-time") * 20.);
- experience = section.getInt("exp");
- } catch (Exception e) {
- MMOCore.plugin.getLogger().log(Level.WARNING, "Could not register brewing recipe named " + section.getName());
- valid = false;
- }
- }
-
- public BrewingRecipe(Type ingredientType, String ingredientId, int time, Type type, String id) {
- this.ingredientType = ingredientType;
- this.ingredientId = ingredientId;
- this.time = time;
- this.type = type;
- this.id = id;
- }
-
- public boolean isValid() {
- return valid;
- }
-
- public boolean matchesIngredient(NBTItem nbt) {
- return nbt.getString("MMOITEMS_ITEM_TYPE").equals(ingredientType.getId()) && nbt.getString("MMOITEMS_ITEM_ID").equals(ingredientId);
- }
-
- public boolean matchesIngredient(ItemStack item) {
- return matchesIngredient(NBTItem.get(item));
- }
-
- public int getCookingTime() {
- return time;
- }
-
- public ItemStack getResult() {
- return MMOItems.plugin.getItems().getItem(type, id);
- }
- }
-
- // @EventHandler
- // public void a(ProjectileLaunchEvent event) {
- // if (!(event.getEntity() instanceof ThrownPotion) ||
- // !(event.getEntity().getShooter() instanceof Player))
- // return;
- //
- // double c = 1 + random.nextDouble() * 2;
- //
- // Vector vec = event.getEntity().getVelocity();
- // vec.setX(vec.getX() * c);
- // vec.setZ(vec.getZ() * c);
- // event.getEntity().setVelocity(vec);
- //
- // new PotionParticles((ThrownPotion) event.getEntity()).start();
- // }
-}
diff --git a/src/main/java/net/Indyuce/mmocore/listener/profession/Smelting.java b/src/main/java/net/Indyuce/mmocore/listener/profession/Smelting.java
deleted file mode 100644
index c15563b6..00000000
--- a/src/main/java/net/Indyuce/mmocore/listener/profession/Smelting.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package net.Indyuce.mmocore.listener.profession;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.bukkit.Bukkit;
-import org.bukkit.Material;
-import org.bukkit.NamespacedKey;
-import org.bukkit.configuration.ConfigurationSection;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.inventory.FurnaceSmeltEvent;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.Recipe;
-
-import net.Indyuce.mmocore.MMOCore;
-import net.Indyuce.mmoitems.MMOItems;
-import net.Indyuce.mmoitems.api.Type;
-import net.mmogroup.mmolib.MMOLib;
-import net.mmogroup.mmolib.api.item.NBTItem;
-
-public class Smelting implements Listener {
-
- /*
- * FurnaceSmeltEvent is called when an item has actually been smelted.
- * FurnaceBurnEvent is called when a fuel piece is used to refill up the
- * furnace fuel bar.
- */
-
- private static Set recipes = new HashSet<>();
- private static Set vanillaKeys = new HashSet<>();
-
- public Smelting(ConfigurationSection config) {
- for (Iterator iterator = Bukkit.recipeIterator(); iterator.hasNext();) {
- //Recipe recipe = iterator.next();
- //if (recipe instanceof FurnaceRecipe && vanillaKeys.contains(((FurnaceRecipe) recipe).getKey()))
- // iterator.remove();
- }
-
- Smelting.recipes.clear();
- Smelting.vanillaKeys.clear();
-
- for (String key : config.getKeys(false)) {
- SmeltingRecipe recipe = new SmeltingRecipe(config.getConfigurationSection(key));
- if (recipe.isValid()) {
- recipes.add(recipe);
- NamespacedKey vanillaKey = new NamespacedKey(MMOCore.plugin, "furnace_recipe_" + key.replace("-", "_").toLowerCase());
- vanillaKeys.add(vanillaKey);
- Bukkit.addRecipe(MMOLib.plugin.getVersion().getWrapper().getFurnaceRecipe(vanillaKey, new ItemStack(Material.BARRIER), recipe.getIngredientMaterial(), 0, recipe.getCookingTime()));
- }
- }
- }
-
- @EventHandler
- public void a(FurnaceSmeltEvent event) {
- NBTItem ingredient = NBTItem.get(event.getSource());
- SmeltingRecipe recipe = getCorrespondingRecipe(ingredient);
- if (recipe == null)
- event.setCancelled(true);
- else
- event.setResult(recipe.getResult());
- }
-
- private SmeltingRecipe getCorrespondingRecipe(NBTItem item) {
- for (SmeltingRecipe recipe : recipes)
- if (recipe.matchesIngredient(item))
- return recipe;
- return null;
- }
-
- public class SmeltingRecipe {
-
- // ingredient & result
- private Type ingredientType, resultType;
- private String ingredientId, resultId;
- private Material ingredientMaterial;
-
- private int time;
-
- public SmeltingRecipe(ConfigurationSection section) {
- try {
- String[] split = section.getString("ingredient").split("\\.");
- ingredientMaterial = MMOItems.plugin.getItems().getItem(ingredientType = MMOItems.plugin.getTypes().get(split[0]), ingredientId = split[1]).getType();
-
- split = section.getString("result").split("\\.");
- resultType = MMOItems.plugin.getTypes().get(split[0]);
- resultId = split[1];
-
- time = (int) (section.getDouble("cook-time") * 20.);
- } catch (Exception e) {
- MMOCore.plugin.getLogger().log(Level.WARNING, "Could not load furnace recipe named " + section.getName());
- }
- }
-
- public SmeltingRecipe(Type ingredientType, String ingredientId, int time, Type resultType, String resultId) {
- this.ingredientType = ingredientType;
- this.ingredientId = ingredientId;
- this.time = time;
- this.resultType = resultType;
- this.resultId = resultId;
- }
-
- public boolean isValid() {
- return ingredientType != null && ingredientId != null && time > 0 && resultType != null && resultId != null && ingredientMaterial != null;
- }
-
- public boolean matchesIngredient(NBTItem nbt) {
- return nbt.getString("MMOITEMS_ITEM_TYPE").equals(ingredientType.getId()) && nbt.getString("MMOITEMS_ITEM_ID").equals(ingredientId);
- }
-
- @Deprecated
- public boolean matchesIngredient(ItemStack item) {
- return matchesIngredient(NBTItem.get(item));
- }
-
- public int getCookingTime() {
- return time;
- }
-
- public ItemStack getResult() {
- return MMOItems.plugin.getItems().getItem(resultType, resultId);
- }
-
- public Material getIngredientMaterial() {
- return ingredientMaterial;
- }
-
- public String toString() {
- return "{ingredient=" + ingredientType.getId() + "." + ingredientId + ", time" + time + ", result=" + resultType.getId() + "." + resultId + ", valid=" + isValid() + "}";
- }
- }
-}