mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-08-03 21:15:28 +02:00
Fixing Alchemy Part 1
This commit is contained in:
@@ -40,7 +40,7 @@ import com.gmail.nossr50.config.hocon.skills.unarmed.ConfigUnarmed;
|
||||
import com.gmail.nossr50.config.hocon.skills.woodcutting.ConfigWoodcutting;
|
||||
import com.gmail.nossr50.config.hocon.superabilities.ConfigSuperAbilities;
|
||||
import com.gmail.nossr50.config.hocon.worldblacklist.ConfigWorldBlacklist;
|
||||
import com.gmail.nossr50.config.skills.alchemy.PotionConfig;
|
||||
import com.gmail.nossr50.config.skills.alchemy.PotionManager;
|
||||
import com.gmail.nossr50.config.treasure.ExcavationTreasureConfig;
|
||||
import com.gmail.nossr50.config.treasure.FishingTreasureConfig;
|
||||
import com.gmail.nossr50.config.treasure.HerbalismTreasureConfig;
|
||||
@@ -93,6 +93,7 @@ public final class ConfigManager {
|
||||
/* MISC MANAGERS */
|
||||
private TypeSerializerCollection customSerializers;
|
||||
private ExperienceMapManager experienceMapManager;
|
||||
private PotionManager potionManager;
|
||||
|
||||
/* CONFIG INSTANCES */
|
||||
|
||||
@@ -141,7 +142,7 @@ public final class ConfigManager {
|
||||
private SerializedConfigLoader<ConfigPartyData> partyData;
|
||||
|
||||
//YAML CONFIGS
|
||||
private PotionConfig potionConfig;
|
||||
|
||||
|
||||
private MainConfig mainConfig;
|
||||
private FishingTreasureConfig fishingTreasureConfig;
|
||||
@@ -196,7 +197,7 @@ public final class ConfigManager {
|
||||
}
|
||||
|
||||
private void initYAMLConfigs() {
|
||||
potionConfig = new PotionConfig();
|
||||
|
||||
}
|
||||
|
||||
private void initSerializedDataFiles() {
|
||||
@@ -332,6 +333,7 @@ public final class ConfigManager {
|
||||
//Set the global XP val
|
||||
experienceMapManager.setGlobalXpMult(getConfigExperience().getGlobalXPMultiplier());
|
||||
experienceMapManager.buildBlockXPMaps(); //Block XP value maps
|
||||
potionManager = new PotionManager();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -468,8 +470,8 @@ public final class ConfigManager {
|
||||
return advancedConfig;
|
||||
}
|
||||
|
||||
public PotionConfig getPotionConfig() {
|
||||
return potionConfig;
|
||||
public PotionManager getPotionManager() {
|
||||
return potionManager;
|
||||
}
|
||||
|
||||
public CoreSkillsConfig getCoreSkillsConfig() {
|
||||
|
@@ -1,356 +0,0 @@
|
||||
package com.gmail.nossr50.config.skills.alchemy;
|
||||
|
||||
import com.gmail.nossr50.config.ConfigCollection;
|
||||
import com.gmail.nossr50.config.ConfigConstants;
|
||||
import com.gmail.nossr50.datatypes.skills.alchemy.AlchemyPotion;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.google.common.reflect.TypeToken;
|
||||
import ninja.leaping.configurate.ConfigurationNode;
|
||||
import ninja.leaping.configurate.objectmapping.ObjectMappingException;
|
||||
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionData;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.potion.PotionType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Eventually I'm going to delete all of our Alchemy code and rewrite it from scratch
|
||||
*/
|
||||
@ConfigSerializable
|
||||
public class PotionConfig extends ConfigCollection {
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
public static final String CONCOCTIONS = "Concoctions";
|
||||
public static final String TIER_ONE_INGREDIENTS = "Tier_One_Ingredients";
|
||||
public static final String TIER_TWO_INGREDIENTS = "Tier_Two_Ingredients";
|
||||
public static final String TIER_THREE_INGREDIENTS = "Tier_Three_Ingredients";
|
||||
public static final String TIER_FOUR_INGREDIENTS = "Tier_Four_Ingredients";
|
||||
public static final String TIER_FIVE_INGREDIENTS = "Tier_Five_Ingredients";
|
||||
public static final String TIER_SIX_INGREDIENTS = "Tier_Six_Ingredients";
|
||||
public static final String TIER_SEVEN_INGREDIENTS = "Tier_Seven_Ingredients";
|
||||
public static final String TIER_EIGHT_INGREDIENTS = "Tier_Eight_Ingredients";
|
||||
public static final String POTIONS = "Potions";
|
||||
public static final String NAME = "Name";
|
||||
public static final String POTION_DATA = "PotionData";
|
||||
public static final String POTION_TYPE = "PotionType";
|
||||
public static final String WATER = "WATER";
|
||||
public static final String EXTENDED = "Extended";
|
||||
public static final String UPGRADED = "Upgraded";
|
||||
public static final String MATERIAL = "Material";
|
||||
public static final String LORE = "Lore";
|
||||
public static final String EFFECTS = "Effects";
|
||||
public static final String COLOR = "Color";
|
||||
public static final String CHILDREN = "Children";
|
||||
|
||||
/* INGREDIENTS */
|
||||
|
||||
private List<ItemStack> concoctionsIngredientsTierOne;
|
||||
private List<ItemStack> concoctionsIngredientsTierTwo;
|
||||
private List<ItemStack> concoctionsIngredientsTierThree;
|
||||
private List<ItemStack> concoctionsIngredientsTierFour;
|
||||
private List<ItemStack> concoctionsIngredientsTierFive;
|
||||
private List<ItemStack> concoctionsIngredientsTierSix;
|
||||
private List<ItemStack> concoctionsIngredientsTierSeven;
|
||||
private List<ItemStack> concoctionsIngredientsTierEight;
|
||||
|
||||
private Map<String, AlchemyPotion> potionMap = new HashMap<>();
|
||||
|
||||
public PotionConfig() {
|
||||
super("skillranks", mcMMO.p.getDataFolder().getAbsoluteFile(), ConfigConstants.RELATIVE_PATH_CONFIG_DIR, true, true, true, true);
|
||||
initIngredientLists();
|
||||
register();
|
||||
}
|
||||
|
||||
/**
|
||||
* This grabs an instance of this config class from the Config Manager
|
||||
* This method is deprecated and will be removed in the future
|
||||
*
|
||||
* @return the instance of this config
|
||||
* @see mcMMO#getConfigManager()
|
||||
* @deprecated Please use mcMMO.getConfigManager() to grab a specific config instead
|
||||
*/
|
||||
@Deprecated
|
||||
public static PotionConfig getInstance() {
|
||||
return mcMMO.getConfigManager().getPotionConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
potionMap.clear();
|
||||
}
|
||||
|
||||
private void initIngredientLists() {
|
||||
concoctionsIngredientsTierOne = new ArrayList<>();
|
||||
concoctionsIngredientsTierTwo = new ArrayList<>();
|
||||
concoctionsIngredientsTierThree = new ArrayList<>();
|
||||
concoctionsIngredientsTierFour = new ArrayList<>();
|
||||
concoctionsIngredientsTierFive = new ArrayList<>();
|
||||
concoctionsIngredientsTierSix = new ArrayList<>();
|
||||
concoctionsIngredientsTierSeven = new ArrayList<>();
|
||||
concoctionsIngredientsTierEight = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* The version of this config
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public double getConfigVersion() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register() {
|
||||
loadConcoctions();
|
||||
loadPotionMap();
|
||||
}
|
||||
|
||||
private void loadConcoctions() {
|
||||
try {
|
||||
//TODO: Rewrite this
|
||||
loadConcoctionsTier(concoctionsIngredientsTierOne, getListFromNode(CONCOCTIONS, TIER_ONE_INGREDIENTS));
|
||||
loadConcoctionsTier(concoctionsIngredientsTierTwo, getListFromNode(CONCOCTIONS, TIER_TWO_INGREDIENTS));
|
||||
loadConcoctionsTier(concoctionsIngredientsTierThree, getListFromNode(CONCOCTIONS, TIER_THREE_INGREDIENTS));
|
||||
loadConcoctionsTier(concoctionsIngredientsTierFour, getListFromNode(CONCOCTIONS, TIER_FOUR_INGREDIENTS));
|
||||
loadConcoctionsTier(concoctionsIngredientsTierFive, getListFromNode(CONCOCTIONS, TIER_FIVE_INGREDIENTS));
|
||||
loadConcoctionsTier(concoctionsIngredientsTierSix, getListFromNode(CONCOCTIONS, TIER_SIX_INGREDIENTS));
|
||||
loadConcoctionsTier(concoctionsIngredientsTierSeven, getListFromNode(CONCOCTIONS, TIER_SEVEN_INGREDIENTS));
|
||||
loadConcoctionsTier(concoctionsIngredientsTierEight, getListFromNode(CONCOCTIONS, TIER_EIGHT_INGREDIENTS));
|
||||
|
||||
concoctionsIngredientsTierTwo.addAll(concoctionsIngredientsTierOne);
|
||||
concoctionsIngredientsTierThree.addAll(concoctionsIngredientsTierTwo);
|
||||
concoctionsIngredientsTierFour.addAll(concoctionsIngredientsTierThree);
|
||||
concoctionsIngredientsTierFive.addAll(concoctionsIngredientsTierFour);
|
||||
concoctionsIngredientsTierSix.addAll(concoctionsIngredientsTierFive);
|
||||
concoctionsIngredientsTierSeven.addAll(concoctionsIngredientsTierSix);
|
||||
concoctionsIngredientsTierEight.addAll(concoctionsIngredientsTierSeven);
|
||||
} catch (ObjectMappingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void loadConcoctionsTier(List<ItemStack> ingredientList, List<String> ingredients) {
|
||||
if (ingredients != null && ingredients.size() > 0) {
|
||||
for (String ingredientString : ingredients) {
|
||||
ItemStack ingredient = loadIngredient(ingredientString);
|
||||
|
||||
if (ingredient != null) {
|
||||
ingredientList.add(ingredient);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the Potions configuration section and load all defined potions.
|
||||
*/
|
||||
private void loadPotionMap() {
|
||||
//ConfigurationSection potionSection = config.getConfigurationSection("Potions");
|
||||
int pass = 0;
|
||||
int fail = 0;
|
||||
|
||||
for (ConfigurationNode potionNode : getChildren(POTIONS)) {
|
||||
//Grab the child node corresponding to this potion
|
||||
String potionName = potionNode.getString();
|
||||
AlchemyPotion potion = loadPotion(getUserRootNode().getNode(POTIONS, potionName));
|
||||
|
||||
if (potion != null) {
|
||||
potionMap.put(potionName, potion);
|
||||
pass++;
|
||||
} else {
|
||||
fail++;
|
||||
}
|
||||
}
|
||||
|
||||
mcMMO.p.debug("Loaded " + pass + " Alchemy potions, skipped " + fail + ".");
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a ConfigurationSection representing a AlchemyPotion.
|
||||
* Returns null if input cannot be parsed.
|
||||
*
|
||||
* @param potion_section ConfigurationSection to be parsed.
|
||||
* @return Parsed AlchemyPotion.
|
||||
*/
|
||||
private AlchemyPotion loadPotion(ConfigurationNode potion_section) {
|
||||
try {
|
||||
|
||||
String name = potion_section.getString(NAME);
|
||||
|
||||
if (name != null) {
|
||||
name = ChatColor.translateAlternateColorCodes('&', name);
|
||||
}
|
||||
|
||||
PotionData data;
|
||||
//If the potion data is null
|
||||
ConfigurationNode potionData = potion_section.getNode(POTION_DATA);
|
||||
|
||||
PotionType potionType = potionData.getNode(POTION_TYPE) != null ? PotionType.valueOf(potionData.getNode(POTION_TYPE).getString()) : PotionType.valueOf(WATER);
|
||||
boolean potionExtended = potionData.getNode(EXTENDED) != null ? potionData.getNode(EXTENDED).getBoolean() : false;
|
||||
boolean potionUpgraded = potionData.getNode(UPGRADED) != null ? potionData.getNode(UPGRADED).getBoolean() : false;
|
||||
|
||||
data = new PotionData(potionType, potionExtended, potionUpgraded);
|
||||
|
||||
Material material = Material.POTION;
|
||||
|
||||
String materialTypeString = potion_section.getNode(MATERIAL) != null ? potion_section.getNode(MATERIAL).getString() : null;
|
||||
|
||||
|
||||
if (materialTypeString != null) {
|
||||
material = Material.valueOf(materialTypeString);
|
||||
}
|
||||
|
||||
List<String> lore = new ArrayList<>();
|
||||
if (potion_section.getNode(LORE) != null) {
|
||||
for (String line : potion_section.getNode(LORE).getList(TypeToken.of(String.class))) {
|
||||
lore.add(ChatColor.translateAlternateColorCodes('&', line));
|
||||
}
|
||||
}
|
||||
|
||||
List<PotionEffect> effects = new ArrayList<>();
|
||||
if (potion_section.getNode(EFFECTS) != null) {
|
||||
for (String effect : potion_section.getNode(EFFECTS).getList(TypeToken.of(String.class))) {
|
||||
String[] parts = effect.split(" ");
|
||||
|
||||
PotionEffectType type = parts.length > 0 ? PotionEffectType.getByName(parts[0]) : null;
|
||||
int amplifier = parts.length > 1 ? Integer.parseInt(parts[1]) : 0;
|
||||
int duration = parts.length > 2 ? Integer.parseInt(parts[2]) : 0;
|
||||
|
||||
if (type != null) {
|
||||
effects.add(new PotionEffect(type, duration, amplifier));
|
||||
} else {
|
||||
mcMMO.p.getLogger().warning("Failed to parse effect for potion " + name + ": " + effect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Color color;
|
||||
if (potion_section.getNode(COLOR) != null) {
|
||||
color = Color.fromRGB(potion_section.getNode(COLOR).getInt());
|
||||
} else {
|
||||
color = this.generateColor(effects);
|
||||
}
|
||||
|
||||
Map<ItemStack, String> children = new HashMap<>();
|
||||
if (potion_section.getNode(CHILDREN) != null) {
|
||||
for (String child : potion_section.getNode(CHILDREN).getList(TypeToken.of(String.class))) {
|
||||
ItemStack ingredient = loadIngredient(child);
|
||||
if (ingredient != null) {
|
||||
children.put(ingredient, potion_section.getNode(CHILDREN).getNode(child).getString());
|
||||
} else {
|
||||
mcMMO.p.getLogger().warning("Failed to parse child for potion " + name + ": " + child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new AlchemyPotion(material, data, name, lore, effects, color, children);
|
||||
} catch (Exception e) {
|
||||
mcMMO.p.getLogger().warning("Failed to load Alchemy potion: " + potion_section.getString());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a string representation of an ingredient.
|
||||
* Format: '<MATERIAL>[:data]'
|
||||
* Returns null if input cannot be parsed.
|
||||
*
|
||||
* @param ingredient String representing an ingredient.
|
||||
* @return Parsed ingredient.
|
||||
*/
|
||||
private ItemStack loadIngredient(String ingredient) {
|
||||
if (ingredient == null || ingredient.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Material material = Material.getMaterial(ingredient);
|
||||
|
||||
if (material != null) {
|
||||
return new ItemStack(material, 1);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<ItemStack> getIngredients(int tier) {
|
||||
switch (tier) {
|
||||
case 8:
|
||||
return concoctionsIngredientsTierEight;
|
||||
case 7:
|
||||
return concoctionsIngredientsTierSeven;
|
||||
case 6:
|
||||
return concoctionsIngredientsTierSix;
|
||||
case 5:
|
||||
return concoctionsIngredientsTierFive;
|
||||
case 4:
|
||||
return concoctionsIngredientsTierFour;
|
||||
case 3:
|
||||
return concoctionsIngredientsTierThree;
|
||||
case 2:
|
||||
return concoctionsIngredientsTierTwo;
|
||||
case 1:
|
||||
default:
|
||||
return concoctionsIngredientsTierOne;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isValidPotion(ItemStack item) {
|
||||
return getPotion(item) != null;
|
||||
}
|
||||
|
||||
public AlchemyPotion getPotion(String name) {
|
||||
return potionMap.get(name);
|
||||
}
|
||||
|
||||
public AlchemyPotion getPotion(ItemStack item) {
|
||||
for (AlchemyPotion potion : potionMap.values()) {
|
||||
if (potion.isSimilar(item)) {
|
||||
return potion;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Color generateColor(List<PotionEffect> effects) {
|
||||
if (effects != null && !effects.isEmpty()) {
|
||||
List<Color> colors = new ArrayList<>();
|
||||
for (PotionEffect effect : effects) {
|
||||
if (effect.getType().getColor() != null) {
|
||||
colors.add(effect.getType().getColor());
|
||||
}
|
||||
}
|
||||
if (!colors.isEmpty()) {
|
||||
if (colors.size() > 1) {
|
||||
return calculateAverageColor(colors);
|
||||
}
|
||||
return colors.get(0);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Color calculateAverageColor(List<Color> colors) {
|
||||
int red = 0;
|
||||
int green = 0;
|
||||
int blue = 0;
|
||||
for (Color color : colors) {
|
||||
red += color.getRed();
|
||||
green += color.getGreen();
|
||||
blue += color.getBlue();
|
||||
}
|
||||
Color color = Color.fromRGB(red / colors.size(), green / colors.size(), blue / colors.size());
|
||||
return color;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,202 @@
|
||||
package com.gmail.nossr50.config.skills.alchemy;
|
||||
|
||||
import com.gmail.nossr50.datatypes.skills.alchemy.AlchemyPotion;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.skills.alchemy.PotionGenerator;
|
||||
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Eventually I'm going to delete all of our Alchemy code and rewrite it from scratch
|
||||
*/
|
||||
@ConfigSerializable
|
||||
public class PotionManager {
|
||||
|
||||
/* CONSTANTS */
|
||||
public static final String POTIONS = "Potions";
|
||||
// public static final String NAME = "Name";
|
||||
// public static final String POTION_DATA = "PotionData";
|
||||
// public static final String POTION_TYPE = "PotionType";
|
||||
// public static final String WATER = "WATER";
|
||||
// public static final String EXTENDED = "Extended";
|
||||
// public static final String UPGRADED = "Upgraded";
|
||||
// public static final String MATERIAL = "Material";
|
||||
// public static final String LORE = "Lore";
|
||||
// public static final String EFFECTS = "Effects";
|
||||
// public static final String COLOR = "Color";
|
||||
// public static final String CHILDREN = "Children";
|
||||
|
||||
/* INGREDIENTS */
|
||||
|
||||
private List<ItemStack> ingredientTierOne;
|
||||
private List<ItemStack> ingredientTierTwo;
|
||||
private List<ItemStack> ingredientTierThree;
|
||||
private List<ItemStack> ingredientTierFour;
|
||||
private List<ItemStack> ingredientTierFive;
|
||||
private List<ItemStack> ingredientTierSix;
|
||||
private List<ItemStack> ingredientTierSeven;
|
||||
private List<ItemStack> ingredientTierEight;
|
||||
|
||||
private Map<String, AlchemyPotion> potionMap = new HashMap<>();
|
||||
|
||||
public PotionManager() {
|
||||
initIngredientLists();
|
||||
initPotionMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* This grabs an instance of this config class from the Config Manager
|
||||
* This method is deprecated and will be removed in the future
|
||||
*
|
||||
* @return the instance of this config
|
||||
* @see mcMMO#getConfigManager()
|
||||
* @deprecated Please use mcMMO.getConfigManager() to grab a specific config instead
|
||||
*/
|
||||
@Deprecated
|
||||
public static PotionManager getInstance() {
|
||||
return mcMMO.getConfigManager().getPotionManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
potionMap.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* I just want anyone who reads this to know
|
||||
* This entire class is an abomination
|
||||
* What you see below is a hacky solution to keep Alchemy functioning with the new config system
|
||||
* Alchemy will be rewritten, until then, this disgusting class exists.
|
||||
*/
|
||||
private void initIngredientLists() {
|
||||
ingredientTierOne = new ArrayList<>();
|
||||
ingredientTierTwo = new ArrayList<>();
|
||||
ingredientTierThree = new ArrayList<>();
|
||||
ingredientTierFour = new ArrayList<>();
|
||||
ingredientTierFive = new ArrayList<>();
|
||||
ingredientTierSix = new ArrayList<>();
|
||||
ingredientTierSeven = new ArrayList<>();
|
||||
ingredientTierEight = new ArrayList<>();
|
||||
|
||||
ingredientTierOne.add(new ItemStack(Material.BLAZE_POWDER));
|
||||
ingredientTierOne.add(new ItemStack(Material.FERMENTED_SPIDER_EYE));
|
||||
ingredientTierOne.add(new ItemStack(Material.GHAST_TEAR));
|
||||
ingredientTierOne.add(new ItemStack(Material.GLOWSTONE_DUST));
|
||||
ingredientTierOne.add(new ItemStack(Material.GOLDEN_CARROT));
|
||||
ingredientTierOne.add(new ItemStack(Material.MAGMA_CREAM));
|
||||
ingredientTierOne.add(new ItemStack(Material.NETHER_WART));
|
||||
ingredientTierOne.add(new ItemStack(Material.REDSTONE));
|
||||
ingredientTierOne.add(new ItemStack(Material.GLISTERING_MELON_SLICE));
|
||||
ingredientTierOne.add(new ItemStack(Material.SPIDER_EYE));
|
||||
ingredientTierOne.add(new ItemStack(Material.SUGAR));
|
||||
ingredientTierOne.add(new ItemStack(Material.GUNPOWDER));
|
||||
ingredientTierOne.add(new ItemStack(Material.PUFFERFISH));
|
||||
ingredientTierOne.add(new ItemStack(Material.DRAGON_BREATH));
|
||||
|
||||
ingredientTierTwo.add(new ItemStack(Material.CARROT));
|
||||
ingredientTierTwo.add(new ItemStack(Material.SLIME_BALL));
|
||||
ingredientTierTwo.add(new ItemStack(Material.PHANTOM_MEMBRANE));
|
||||
|
||||
ingredientTierThree.add(new ItemStack(Material.QUARTZ));
|
||||
ingredientTierThree.add(new ItemStack(Material.RED_MUSHROOM));
|
||||
|
||||
ingredientTierFour.add(new ItemStack(Material.APPLE));
|
||||
ingredientTierFour.add(new ItemStack(Material.ROTTEN_FLESH));
|
||||
|
||||
ingredientTierFive.add(new ItemStack(Material.BROWN_MUSHROOM));
|
||||
ingredientTierFive.add(new ItemStack(Material.INK_SAC));
|
||||
|
||||
ingredientTierSix.add(new ItemStack(Material.FERN));
|
||||
|
||||
ingredientTierSeven.add(new ItemStack(Material.POISONOUS_POTATO));
|
||||
|
||||
ingredientTierEight.add(new ItemStack(Material.GOLDEN_APPLE));
|
||||
}
|
||||
|
||||
private void loadConcoctionsTier(List<ItemStack> ingredientList, List<String> ingredients) {
|
||||
if (ingredients != null && ingredients.size() > 0) {
|
||||
for (String ingredientString : ingredients) {
|
||||
ItemStack ingredient = loadIngredient(ingredientString);
|
||||
|
||||
if (ingredient != null) {
|
||||
ingredientList.add(ingredient);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void initPotionMap() {
|
||||
PotionGenerator potionGenerator = new PotionGenerator();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a string representation of an ingredient.
|
||||
* Format: '<MATERIAL>[:data]'
|
||||
* Returns null if input cannot be parsed.
|
||||
*
|
||||
* @param ingredient String representing an ingredient.
|
||||
* @return Parsed ingredient.
|
||||
*/
|
||||
private ItemStack loadIngredient(String ingredient) {
|
||||
if (ingredient == null || ingredient.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Material material = Material.getMaterial(ingredient);
|
||||
|
||||
if (material != null) {
|
||||
return new ItemStack(material, 1);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<ItemStack> getIngredients(int tier) {
|
||||
switch (tier) {
|
||||
case 8:
|
||||
return ingredientTierEight;
|
||||
case 7:
|
||||
return ingredientTierSeven;
|
||||
case 6:
|
||||
return ingredientTierSix;
|
||||
case 5:
|
||||
return ingredientTierFive;
|
||||
case 4:
|
||||
return ingredientTierFour;
|
||||
case 3:
|
||||
return ingredientTierThree;
|
||||
case 2:
|
||||
return ingredientTierTwo;
|
||||
case 1:
|
||||
default:
|
||||
return ingredientTierOne;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isValidPotion(ItemStack item) {
|
||||
return getPotion(item) != null;
|
||||
}
|
||||
|
||||
public AlchemyPotion getPotion(String name) {
|
||||
return potionMap.get(name);
|
||||
}
|
||||
|
||||
public AlchemyPotion getPotion(ItemStack item) {
|
||||
for (AlchemyPotion potion : potionMap.values()) {
|
||||
if (potion.isSimilar(item)) {
|
||||
return potion;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user