1.12 hotfix

This commit is contained in:
Aria Sangarin 2020-02-06 18:49:41 +01:00
parent 76af2814ce
commit b30d2ea70e
4 changed files with 201 additions and 234 deletions

View File

@ -58,8 +58,6 @@ import net.Indyuce.mmoitems.manager.DropTableManager;
import net.Indyuce.mmoitems.manager.EntityManager;
import net.Indyuce.mmoitems.manager.ItemManager;
import net.Indyuce.mmoitems.manager.PluginUpdateManager;
import net.Indyuce.mmoitems.manager.RecipeManager;
import net.Indyuce.mmoitems.manager.RecipeManagerLegacy;
import net.Indyuce.mmoitems.manager.SetManager;
import net.Indyuce.mmoitems.manager.StatManager;
import net.Indyuce.mmoitems.manager.TierManager;
@ -67,6 +65,9 @@ import net.Indyuce.mmoitems.manager.TypeManager;
import net.Indyuce.mmoitems.manager.UpdaterManager;
import net.Indyuce.mmoitems.manager.UpgradeManager;
import net.Indyuce.mmoitems.manager.WorldGenManager;
import net.Indyuce.mmoitems.manager.recipe.RecipeManager;
import net.Indyuce.mmoitems.manager.recipe.RecipeManagerDefault;
import net.Indyuce.mmoitems.manager.recipe.RecipeManagerLegacy;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.version.SpigotPlugin;
@ -235,7 +236,7 @@ public class MMOItems extends JavaPlugin {
// advanced recipes
getLogger().log(Level.INFO, "Loading recipes, please wait...");
recipeManager = MMOLib.plugin.getVersion().isStrictlyHigher(1, 12) ?
new RecipeManager() : new RecipeManagerLegacy();
new RecipeManagerDefault() : new RecipeManagerLegacy();
// commands
getCommand("mmoitems").setExecutor(new MMOItemsCommand());

View File

@ -0,0 +1,116 @@
package net.Indyuce.mmoitems.manager.recipe;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.Recipe;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.ShapelessRecipe;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.MMORecipeChoice;
import net.Indyuce.mmoitems.api.Type;
/**
* TODO
* When Bukkit changes their 'RecipeChoice.ExactChoice' API
* we can remove the suppressed warnings, but right now it works
* despite being marked as deprecated. It is just a
*/
public abstract class RecipeManager {
protected List<Recipe> loadedRecipes = new ArrayList<>();
protected Collection<NamespacedKey> keys = new ArrayList<>();
public RecipeManager() { load(); }
protected abstract void load();
/**
* @deprecated Some day I want to get proper rid of the AWB
* but right now we don't want to force players to update
* their recipes right off the bat.
*/
protected void registerAdvancedWorkbenchRecipe(Type type, String id, FileConfiguration config) {
MMOItems.plugin.getLogger().warning("Found deprecated adv. recipe for " + id + ". Converting it to the new system...");
MMOItems.plugin.getLogger().warning("It is recommended to update your recipes!");
NamespacedKey key = getRecipeKey(type, id, "advanced", "deprecated");
ShapedRecipe recipe = new ShapedRecipe(key, MMOItems.plugin.getItems().getItem(type, id));
recipe.shape("012", "345", "678");
setIngredientOrAir(recipe, '0', config.getConfigurationSection(id + ".advanced-craft." + 0));
setIngredientOrAir(recipe, '1', config.getConfigurationSection(id + ".advanced-craft." + 1));
setIngredientOrAir(recipe, '2', config.getConfigurationSection(id + ".advanced-craft." + 2));
setIngredientOrAir(recipe, '3', config.getConfigurationSection(id + ".advanced-craft." + 3));
setIngredientOrAir(recipe, '4', config.getConfigurationSection(id + ".advanced-craft." + 4));
setIngredientOrAir(recipe, '5', config.getConfigurationSection(id + ".advanced-craft." + 5));
setIngredientOrAir(recipe, '6', config.getConfigurationSection(id + ".advanced-craft." + 6));
setIngredientOrAir(recipe, '7', config.getConfigurationSection(id + ".advanced-craft." + 7));
setIngredientOrAir(recipe, '8', config.getConfigurationSection(id + ".advanced-craft." + 8));
loadedRecipes.add(recipe); keys.add(key);
}
// Just for convenience
protected NamespacedKey getRecipeKey(Type t, String i, String type, String number) {
return new NamespacedKey(MMOItems.plugin, "mmorecipe_" + type + "_" + t.getId() + "_" + i + "_" + number);
}
protected abstract void registerFurnaceRecipe(Type type, String id, RecipeInformation info, String number);
protected abstract void registerBlastRecipe(Type type, String id, RecipeInformation info, String number);
protected abstract void registerShapelessRecipe(Type type, String id, ConfigurationSection config, String number);
protected abstract void shapedIngredient(ShapedRecipe recipe, char c, MMORecipeChoice rc);
protected abstract void registerShapedRecipe(Type type, String id, List<String> list, String number);
protected abstract void registerCampfireRecipe(Type type, String id, RecipeInformation info, String number);
protected abstract void registerSmokerRecipe(Type type, String id, RecipeInformation info, String number);
protected abstract void shapelessIngredient(ShapelessRecipe recipe, MMORecipeChoice rc);
/**
* This method is purely for easily converting the AWB recipes.
*
* @deprecated Some day I want to get proper rid of the AWB
* but right now we don't want to force players to update
* their recipes right off the bat.
*/
@Deprecated
protected abstract void setIngredientOrAir(ShapedRecipe recipe, char character, ConfigurationSection c);
// For adding the recipes to the book
public Collection<NamespacedKey> getNamespacedKeys() {
return keys;
}
public void reloadRecipes() {
Bukkit.getScheduler().runTask(MMOItems.plugin, new Runnable() {
@Override
public void run() {
Bukkit.resetRecipes();
loadedRecipes.clear();
keys.clear();
load();
}
});
}
// For the reload command
public int size() {
return loadedRecipes.size();
}
class RecipeInformation {
protected final MMORecipeChoice choice;
protected final float exp;
protected final int burnTime;
protected RecipeInformation(ConfigurationSection config) {
choice = MMORecipeChoice.getFromString(config.getString("item"));
exp = (float) config.getDouble("exp", 0.35);
burnTime = config.getInt("time", 200);
}
}
}

View File

@ -1,7 +1,5 @@
package net.Indyuce.mmoitems.manager;
package net.Indyuce.mmoitems.manager.recipe;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.bukkit.Bukkit;
@ -24,19 +22,10 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.MMORecipeChoice;
import net.Indyuce.mmoitems.api.Type;
/**
* TODO
* When Bukkit changes their 'RecipeChoice.ExactChoice' API
* we can remove the suppressed warnings, but right now it works
* despite being marked as deprecated. It is just a
*/
public class RecipeManager {
private List<Recipe> loadedRecipes = new ArrayList<>();
private Collection<NamespacedKey> keys = new ArrayList<>();
public RecipeManager() { load(); }
private void load() {
@SuppressWarnings("deprecation")
public class RecipeManagerDefault extends RecipeManager {
@Override
protected void load() {
for (Type type : MMOItems.plugin.getTypes().getAll()) {
FileConfiguration config = type.getConfigFile().getConfig();
@ -76,7 +65,40 @@ public class RecipeManager {
});
}
private void registerShapedRecipe(Type type, String id, List<String> list, String number) {
@Override
protected void registerFurnaceRecipe(Type type, String id, RecipeInformation info, String number) {
NamespacedKey key = getRecipeKey(type, id, "furnace", number);
FurnaceRecipe recipe = new FurnaceRecipe(key, MMOItems.plugin.getItems().getItem(type, id), info.choice.generateChoice(), info.exp, info.burnTime);
loadedRecipes.add(recipe); keys.add(key);
}
@Override
protected void registerBlastRecipe(Type type, String id, RecipeInformation info, String number) {
NamespacedKey key = getRecipeKey(type, id, "blast", number);
BlastingRecipe recipe = new BlastingRecipe(key, MMOItems.plugin.getItems().getItem(type, id), info.choice.generateChoice(), info.exp, info.burnTime);
loadedRecipes.add(recipe); keys.add(key);
}
@Override
protected void registerSmokerRecipe(Type type, String id, RecipeInformation info, String number) {
NamespacedKey key = getRecipeKey(type, id, "smoker", number);
SmokingRecipe recipe = new SmokingRecipe(key, MMOItems.plugin.getItems().getItem(type, id), info.choice.generateChoice(), info.exp, info.burnTime);
loadedRecipes.add(recipe); keys.add(key);
}
@Override
protected void registerCampfireRecipe(Type type, String id, RecipeInformation info, String number) {
NamespacedKey key = getRecipeKey(type, id, "campfire", number);
CampfireRecipe recipe = new CampfireRecipe(key, MMOItems.plugin.getItems().getItem(type, id), info.choice.generateChoice(), info.exp, info.burnTime);
loadedRecipes.add(recipe); keys.add(key);
}
@Override
protected void registerShapedRecipe(Type type, String id, List<String> list, String number) {
NamespacedKey key = getRecipeKey(type, id, "shaped", number);
ShapedRecipe recipe = new ShapedRecipe(key, MMOItems.plugin.getItems().getItem(type, id));
@ -98,12 +120,14 @@ public class RecipeManager {
loadedRecipes.add(recipe); keys.add(key);
}
private void shapedIngredient(ShapedRecipe recipe, char c, MMORecipeChoice rc) {
@Override
protected void shapedIngredient(ShapedRecipe recipe, char c, MMORecipeChoice rc) {
if(rc.isAir()) recipe.setIngredient(c, Material.AIR);
else recipe.setIngredient(c, rc.generateChoice());
}
private void registerShapelessRecipe(Type type, String id, ConfigurationSection config, String number) {
@Override
protected void registerShapelessRecipe(Type type, String id, ConfigurationSection config, String number) {
NamespacedKey key = getRecipeKey(type, id, "shapeless", number);
ShapelessRecipe recipe = new ShapelessRecipe(key, MMOItems.plugin.getItems().getItem(type, id));
@ -115,78 +139,13 @@ public class RecipeManager {
loadedRecipes.add(recipe); keys.add(key);
}
private void shapelessIngredient(ShapelessRecipe recipe, MMORecipeChoice rc) {
@Override
protected void shapelessIngredient(ShapelessRecipe recipe, MMORecipeChoice rc) {
if(!rc.isAir()) recipe.addIngredient(rc.generateChoice());
}
private void registerFurnaceRecipe(Type type, String id, RecipeInformation info, String number) {
NamespacedKey key = getRecipeKey(type, id, "furnace", number);
FurnaceRecipe recipe = new FurnaceRecipe(key, MMOItems.plugin.getItems().getItem(type, id), info.choice, info.exp, info.burnTime);
loadedRecipes.add(recipe); keys.add(key);
}
private void registerBlastRecipe(Type type, String id, RecipeInformation info, String number) {
NamespacedKey key = getRecipeKey(type, id, "blast", number);
BlastingRecipe recipe = new BlastingRecipe(key, MMOItems.plugin.getItems().getItem(type, id), info.choice, info.exp, info.burnTime);
loadedRecipes.add(recipe); keys.add(key);
}
private void registerSmokerRecipe(Type type, String id, RecipeInformation info, String number) {
NamespacedKey key = getRecipeKey(type, id, "smoker", number);
SmokingRecipe recipe = new SmokingRecipe(key, MMOItems.plugin.getItems().getItem(type, id), info.choice, info.exp, info.burnTime);
loadedRecipes.add(recipe); keys.add(key);
}
private void registerCampfireRecipe(Type type, String id, RecipeInformation info, String number) {
NamespacedKey key = getRecipeKey(type, id, "campfire", number);
CampfireRecipe recipe = new CampfireRecipe(key, MMOItems.plugin.getItems().getItem(type, id), info.choice, info.exp, info.burnTime);
loadedRecipes.add(recipe); keys.add(key);
}
/**
* @deprecated Some day I want to get proper rid of the AWB
* but right now we don't want to force players to update
* their recipes right off the bat.
*/
private void registerAdvancedWorkbenchRecipe(Type type, String id, FileConfiguration config) {
MMOItems.plugin.getLogger().warning("Found deprecated adv. recipe for " + id + ". Converting it to the new system...");
MMOItems.plugin.getLogger().warning("It is recommended to update your recipes!");
NamespacedKey key = getRecipeKey(type, id, "advanced", "deprecated");
ShapedRecipe recipe = new ShapedRecipe(key, MMOItems.plugin.getItems().getItem(type, id));
recipe.shape("012", "345", "678");
setIngredientOrAir(recipe, '0', config.getConfigurationSection(id + ".advanced-craft." + 0));
setIngredientOrAir(recipe, '1', config.getConfigurationSection(id + ".advanced-craft." + 1));
setIngredientOrAir(recipe, '2', config.getConfigurationSection(id + ".advanced-craft." + 2));
setIngredientOrAir(recipe, '3', config.getConfigurationSection(id + ".advanced-craft." + 3));
setIngredientOrAir(recipe, '4', config.getConfigurationSection(id + ".advanced-craft." + 4));
setIngredientOrAir(recipe, '5', config.getConfigurationSection(id + ".advanced-craft." + 5));
setIngredientOrAir(recipe, '6', config.getConfigurationSection(id + ".advanced-craft." + 6));
setIngredientOrAir(recipe, '7', config.getConfigurationSection(id + ".advanced-craft." + 7));
setIngredientOrAir(recipe, '8', config.getConfigurationSection(id + ".advanced-craft." + 8));
loadedRecipes.add(recipe); keys.add(key);
}
// Just for convenience
private NamespacedKey getRecipeKey(Type t, String i, String type, String number) {
return new NamespacedKey(MMOItems.plugin, "mmorecipe_" + type + "_" + t.getId() + "_" + i + "_" + number);
}
/**
* This method is purely for easily converting the AWB recipes.
*
* @deprecated Some day I want to get proper rid of the AWB
* but right now we don't want to force players to update
* their recipes right off the bat.
*/
@Deprecated
private void setIngredientOrAir(ShapedRecipe recipe, char character, ConfigurationSection c) {
@Override
protected void setIngredientOrAir(ShapedRecipe recipe, char character, ConfigurationSection c) {
if(c.contains("type")) {
ItemStack item = MMOItems.plugin.getItems().getItem(Type.get(c.getString("type")), c.getString("id"));
if(item == null) {
@ -214,38 +173,4 @@ public class RecipeManager {
}
}
}
// For adding the recipes to the book
public Collection<NamespacedKey> getNamespacedKeys() {
return keys;
}
public void reloadRecipes() {
Bukkit.getScheduler().runTask(MMOItems.plugin, new Runnable() {
@Override
public void run() {
Bukkit.resetRecipes();
loadedRecipes.clear();
keys.clear();
load();
}
});
}
// For the reload command
public int size() {
return loadedRecipes.size();
}
class RecipeInformation {
private final RecipeChoice choice;
private final float exp;
private final int burnTime;
private RecipeInformation(ConfigurationSection config) {
choice = MMORecipeChoice.getFromString(config.getString("item")).generateChoice();
exp = (float) config.getDouble("exp", 0.35);
burnTime = config.getInt("time", 200);
}
}
}

View File

@ -1,9 +1,6 @@
package net.Indyuce.mmoitems.manager;
package net.Indyuce.mmoitems.manager.recipe;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.Material;
@ -21,22 +18,10 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.MMORecipeChoice;
import net.Indyuce.mmoitems.api.Type;
/**
* TODO
* When Bukkit changes their 'RecipeChoice.ExactChoice' API
* we can remove the suppressed warnings, but right now it works
* despite being marked as deprecated. It is just a
*/
@SuppressWarnings("deprecation")
public class RecipeManagerLegacy extends RecipeManager {
private List<Recipe> loadedRecipes = new ArrayList<>();
private Collection<NamespacedKey> keys = new ArrayList<>();
public RecipeManagerLegacy() {
MMOItems.plugin.getLogger().log(Level.INFO, "1.12 detected! Loading the Legacy recipe manager...");
load();
}
private void load() {
@Override
protected void load() {
for (Type type : MMOItems.plugin.getTypes().getAll()) {
FileConfiguration config = type.getConfigFile().getConfig();
@ -70,7 +55,23 @@ public class RecipeManagerLegacy extends RecipeManager {
});
}
private void registerShapedRecipe(Type type, String id, List<String> list, String number) {
@Override
protected void registerFurnaceRecipe(Type type, String id, RecipeInformation info, String number) {
NamespacedKey key = getRecipeKey(type, id, "furnace", number);
FurnaceRecipe recipe = new FurnaceRecipe(key, MMOItems.plugin.getItems().getItem(type, id), info.choice.generateLegacy(), info.exp, info.burnTime);
loadedRecipes.add(recipe); keys.add(key);
}
@Override
protected void registerBlastRecipe(Type type, String id, RecipeInformation info, String number) {}
@Override
protected void registerSmokerRecipe(Type type, String id, RecipeInformation info, String number) {}
@Override
protected void registerCampfireRecipe(Type type, String id, RecipeInformation info, String number) {}
@Override
protected void registerShapedRecipe(Type type, String id, List<String> list, String number) {
NamespacedKey key = getRecipeKey(type, id, "shaped", number);
ShapedRecipe recipe = new ShapedRecipe(key, MMOItems.plugin.getItems().getItem(type, id));
@ -92,12 +93,14 @@ public class RecipeManagerLegacy extends RecipeManager {
loadedRecipes.add(recipe); keys.add(key);
}
private void shapedIngredient(ShapedRecipe recipe, char c, MMORecipeChoice rc) {
@Override
protected void shapedIngredient(ShapedRecipe recipe, char c, MMORecipeChoice rc) {
if(rc.isAir()) recipe.setIngredient(c, Material.AIR);
else recipe.setIngredient(c, rc.generateChoice());
else recipe.setIngredient(c, rc.generateLegacy());
}
private void registerShapelessRecipe(Type type, String id, ConfigurationSection config, String number) {
@Override
protected void registerShapelessRecipe(Type type, String id, ConfigurationSection config, String number) {
NamespacedKey key = getRecipeKey(type, id, "shapeless", number);
ShapelessRecipe recipe = new ShapelessRecipe(key, MMOItems.plugin.getItems().getItem(type, id));
@ -109,57 +112,13 @@ public class RecipeManagerLegacy extends RecipeManager {
loadedRecipes.add(recipe); keys.add(key);
}
private void shapelessIngredient(ShapelessRecipe recipe, MMORecipeChoice rc) {
if(!rc.isAir()) recipe.addIngredient(rc.generateChoice());
@Override
protected void shapelessIngredient(ShapelessRecipe recipe, MMORecipeChoice rc) {
if(!rc.isAir()) recipe.addIngredient(rc.generateLegacy());
}
private void registerFurnaceRecipe(Type type, String id, RecipeInformation info, String number) {
NamespacedKey key = getRecipeKey(type, id, "furnace", number);
FurnaceRecipe recipe = new FurnaceRecipe(key, MMOItems.plugin.getItems().getItem(type, id), info.input, info.exp, info.burnTime);
loadedRecipes.add(recipe); keys.add(key);
}
/**
* @deprecated Some day I want to get proper rid of the AWB
* but right now we don't want to force players to update
* their recipes right off the bat.
*/
private void registerAdvancedWorkbenchRecipe(Type type, String id, FileConfiguration config) {
MMOItems.plugin.getLogger().warning("Found deprecated adv. recipe for " + id + ". Converting it to the new system...");
MMOItems.plugin.getLogger().warning("It is recommended to update your recipes!");
NamespacedKey key = getRecipeKey(type, id, "advanced", "deprecated");
ShapedRecipe recipe = new ShapedRecipe(key, MMOItems.plugin.getItems().getItem(type, id));
recipe.shape("012", "345", "678");
setIngredientOrAir(recipe, '0', config.getConfigurationSection(id + ".advanced-craft." + 0));
setIngredientOrAir(recipe, '1', config.getConfigurationSection(id + ".advanced-craft." + 1));
setIngredientOrAir(recipe, '2', config.getConfigurationSection(id + ".advanced-craft." + 2));
setIngredientOrAir(recipe, '3', config.getConfigurationSection(id + ".advanced-craft." + 3));
setIngredientOrAir(recipe, '4', config.getConfigurationSection(id + ".advanced-craft." + 4));
setIngredientOrAir(recipe, '5', config.getConfigurationSection(id + ".advanced-craft." + 5));
setIngredientOrAir(recipe, '6', config.getConfigurationSection(id + ".advanced-craft." + 6));
setIngredientOrAir(recipe, '7', config.getConfigurationSection(id + ".advanced-craft." + 7));
setIngredientOrAir(recipe, '8', config.getConfigurationSection(id + ".advanced-craft." + 8));
loadedRecipes.add(recipe); keys.add(key);
}
// Just for convenience
private NamespacedKey getRecipeKey(Type t, String i, String type, String number) {
return new NamespacedKey(MMOItems.plugin, "mmorecipe_" + type + "_" + t.getId() + "_" + i + "_" + number);
}
/**
* This method is purely for easily converting the AWB recipes.
*
* @deprecated Some day I want to get proper rid of the AWB
* but right now we don't want to force players to update
* their recipes right off the bat.
*/
@Deprecated
private void setIngredientOrAir(ShapedRecipe recipe, char character, ConfigurationSection c) {
@Override
protected void setIngredientOrAir(ShapedRecipe recipe, char character, ConfigurationSection c) {
if(c.contains("type")) {
ItemStack item = MMOItems.plugin.getItems().getItem(Type.get(c.getString("type")), c.getString("id"));
if(item == null) {
@ -183,42 +142,8 @@ public class RecipeManagerLegacy extends RecipeManager {
ItemStack item = new ItemStack(material);
item.setAmount(amount); ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name); item.setItemMeta(meta);
recipe.setIngredient(character, material);
recipe.setIngredient(character, item.getType());
}
}
}
// For adding the recipes to the book
public Collection<NamespacedKey> getNamespacedKeys() {
return keys;
}
public void reloadRecipes() {
Bukkit.getScheduler().runTask(MMOItems.plugin, new Runnable() {
@Override
public void run() {
Bukkit.resetRecipes();
loadedRecipes.clear();
keys.clear();
load();
}
});
}
// For the reload command
public int size() {
return loadedRecipes.size();
}
class RecipeInformation {
private final Material input;
private final float exp;
private final int burnTime;
private RecipeInformation(ConfigurationSection config) {
input = MMORecipeChoice.getFromString(config.getString("item")).generateLegacy();
exp = (float) config.getDouble("exp", 0.35);
burnTime = config.getInt("time", 200);
}
}
}