Merged normal items and gen templates

This commit is contained in:
Indyuce 2020-08-10 01:49:55 +02:00
parent 9f9e0524c9
commit cadced36aa
169 changed files with 1050 additions and 1269 deletions

View File

@ -1,8 +1,23 @@
package net.Indyuce.mmoitems;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.SoulboundInfo;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.command.MMOItemsCommand;
import net.Indyuce.mmoitems.command.UpdateItemCommand;
@ -17,7 +32,11 @@ import net.Indyuce.mmoitems.comp.flags.DefaultFlags;
import net.Indyuce.mmoitems.comp.flags.FlagPlugin;
import net.Indyuce.mmoitems.comp.flags.ResidenceFlags;
import net.Indyuce.mmoitems.comp.flags.WorldGuardFlags;
import net.Indyuce.mmoitems.comp.holograms.*;
import net.Indyuce.mmoitems.comp.holograms.CMIPlugin;
import net.Indyuce.mmoitems.comp.holograms.HologramSupport;
import net.Indyuce.mmoitems.comp.holograms.HologramsPlugin;
import net.Indyuce.mmoitems.comp.holograms.HolographicDisplaysPlugin;
import net.Indyuce.mmoitems.comp.holograms.TrHologramPlugin;
import net.Indyuce.mmoitems.comp.inventory.DefaultPlayerInventory;
import net.Indyuce.mmoitems.comp.inventory.OrnamentPlayerInventory;
import net.Indyuce.mmoitems.comp.inventory.PlayerInventory;
@ -35,29 +54,34 @@ import net.Indyuce.mmoitems.comp.rpg.DefaultHook;
import net.Indyuce.mmoitems.comp.rpg.RPGHandler;
import net.Indyuce.mmoitems.gui.PluginInventory;
import net.Indyuce.mmoitems.gui.listener.GuiListener;
import net.Indyuce.mmoitems.listener.*;
import net.Indyuce.mmoitems.listener.CraftingListener;
import net.Indyuce.mmoitems.listener.CustomBlockListener;
import net.Indyuce.mmoitems.listener.CustomSoundListener;
import net.Indyuce.mmoitems.listener.DisableInteractions;
import net.Indyuce.mmoitems.listener.DurabilityListener;
import net.Indyuce.mmoitems.listener.ElementListener;
import net.Indyuce.mmoitems.listener.ItemUse;
import net.Indyuce.mmoitems.listener.PlayerListener;
import net.Indyuce.mmoitems.listener.version.Listener_v1_13;
import net.Indyuce.mmoitems.manager.*;
import net.Indyuce.mmoitems.manager.recipe.RecipeManager;
import net.Indyuce.mmoitems.manager.recipe.RecipeManagerDefault;
import net.Indyuce.mmoitems.manager.recipe.RecipeManagerLegacy;
import net.Indyuce.mmoitems.manager.AbilityManager;
import net.Indyuce.mmoitems.manager.BlockManager;
import net.Indyuce.mmoitems.manager.ConfigManager;
import net.Indyuce.mmoitems.manager.CraftingManager;
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.SetManager;
import net.Indyuce.mmoitems.manager.StatManager;
import net.Indyuce.mmoitems.manager.TierManager;
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.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.player.MMOPlayerData;
import net.mmogroup.mmolib.version.SpigotPlugin;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
public class MMOItems extends JavaPlugin {
public static MMOItems plugin;
@ -65,10 +89,10 @@ public class MMOItems extends JavaPlugin {
private final PluginUpdateManager pluginUpdateManager = new PluginUpdateManager();
private final CraftingManager stationRecipeManager = new CraftingManager();
private final AbilityManager abilityManager = new AbilityManager();
private final ItemGenManager itemGenerator = new ItemGenManager();
private final EntityManager entityManager = new EntityManager();
private final TypeManager typeManager = new TypeManager();
private final ItemManager itemManager = new ItemManager();
private DropTableManager dropTableManager;
private WorldGenManager worldGenManager;
private UpgradeManager upgradeManager;
@ -78,7 +102,6 @@ public class MMOItems extends JavaPlugin {
private BlockManager blockManager;
private TierManager tierManager;
private StatManager statManager;
private ItemManager itemManager;
private SetManager setManager;
private PlaceholderParser placeholderParser = new DefaultPlaceholderParser();
@ -119,13 +142,12 @@ public class MMOItems extends JavaPlugin {
abilityManager.initialize();
configManager = new ConfigManager();
itemManager = new ItemManager();
itemManager.reload();
tierManager = new TierManager();
setManager = new SetManager();
upgradeManager = new UpgradeManager();
dropTableManager = new DropTableManager();
dynamicUpdater = new UpdaterManager();
itemGenerator.reload();
if (MMOLib.plugin.getVersion().isStrictlyHigher(1, 12)) {
worldGenManager = new WorldGenManager();
blockManager = new BlockManager();
@ -246,7 +268,7 @@ public class MMOItems extends JavaPlugin {
// advanced recipes
getLogger().log(Level.INFO, "Loading recipes, please wait...");
recipeManager = MMOLib.plugin.getVersion().isStrictlyHigher(1, 12) ? new RecipeManagerDefault() : new RecipeManagerLegacy();
recipeManager = new RecipeManager();
// commands
getCommand("mmoitems").setExecutor(new MMOItemsCommand());
@ -304,9 +326,6 @@ public class MMOItems extends JavaPlugin {
return flagPlugin;
}
public ItemGenManager getItemGenerator() {
return itemGenerator;
}
public void setFlags(FlagPlugin value) {
flagPlugin = value;

View File

@ -61,13 +61,14 @@ public class ConfigFile {
}
}
@Deprecated
public void registerItemEdition(Type type, String id) {
/*
* uncaches the item so it can be generated to apply newest changes in
* case the same inventory is opened again.
*/
MMOItems.plugin.getItems().uncache(type, id);
// MMOItems.plugin.getItems().uncache(type, id);
/*
* update the database UUID for the dynamic item updater

View File

@ -9,21 +9,27 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.api.droptable.DropTable;
import net.Indyuce.mmoitems.api.util.NumericStatFormula;
import net.Indyuce.mmoitems.comp.itemglow.TierColor;
import net.mmogroup.mmolib.MMOLib;
public class ItemTier {
private final String name, id;
// unidentification
private final UnidentificationInfo unidentificationInfo;
// deconstruction
private final DropTable deconstruct;
/*
* item glow. color is an object because we cant let this class import the
* GlowAPI.Color enum since plugin is not a hard dependency.
*/
// item glow options
private final TierColor color;
private final boolean hint;
// item generation
private final double chance;
private final NumericStatFormula capacity;
private static final Random random = new Random();
private static final boolean glow = Bukkit.getPluginManager().getPlugin("GlowAPI") != null;
@ -39,6 +45,9 @@ public class ItemTier {
} catch (NoClassDefFoundError | IllegalAccessException | NoSuchFieldException | SecurityException exception) {
throw new IllegalArgumentException("Could not load tier color: " + exception.getMessage());
}
chance = config.getDouble("generation.chance");
capacity = config.contains("generation.capacity") ? new NumericStatFormula(config.getConfigurationSection("")) : null;
}
public String getId() {
@ -69,12 +78,32 @@ public class ItemTier {
return hint;
}
/**
* @return The chance of being chosen when a random tier is selected while
* calling an mmoitem template to generate an item.
*/
public double getGenerationChance() {
return chance;
}
/**
* @return If the item tier has capacity ie if this tier can be applied onto
* item templates.
*/
public boolean hasCapacity() {
return capacity != null;
}
public NumericStatFormula getCapacity() {
return capacity;
}
public UnidentificationInfo getUnidentificationInfo() {
return unidentificationInfo;
}
/*
* reads a random item in the drop table.
/**
* @return Reads a random item in the deconstruction drop table
*/
public List<ItemStack> generateDeconstructedItem() {
return hasDropTable() ? deconstruct.read(false) : new ArrayList<>();

View File

@ -1,7 +1,7 @@
package net.Indyuce.mmoitems.api;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.item.plugin.identify.UnidentifiedItem;
import net.Indyuce.mmoitems.api.item.internal.identify.UnidentifiedItem;
import net.Indyuce.mmoitems.manager.TypeManager;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.MMOLib;

View File

@ -9,7 +9,7 @@ import org.apache.commons.lang.Validate;
import org.bukkit.configuration.ConfigurationSection;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.data.type.UpgradeInfo;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.Indyuce.mmoitems.stat.type.Upgradable;

View File

@ -1,7 +1,7 @@
package net.Indyuce.mmoitems.api.block;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.util.MushroomState;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.type.ItemStat;

View File

@ -6,7 +6,7 @@ import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
public class ConfigMMOItem {
private final MMOItem mmoitem;

View File

@ -4,7 +4,7 @@ import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
import net.Indyuce.mmoitems.api.item.internal.ConfigItem;
public class StationItemOptions {
private final ItemStack fill, noRecipe, noQueueItem;

View File

@ -7,7 +7,7 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.crafting.ConfigMMOItem;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.DisplayName;
import net.Indyuce.mmoitems.stat.data.MaterialData;
import net.Indyuce.mmoitems.stat.type.ItemStat;

View File

@ -11,7 +11,7 @@ import net.Indyuce.mmoitems.api.crafting.CraftingStation;
import net.Indyuce.mmoitems.api.crafting.CraftingStatus.CraftingQueue;
import net.Indyuce.mmoitems.api.crafting.IngredientInventory;
import net.Indyuce.mmoitems.api.event.crafting.PlayerUseCraftingStationEvent;
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
import net.Indyuce.mmoitems.api.item.internal.ConfigItem;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.api.util.message.Message;
import net.mmogroup.mmolib.api.util.SmartGive;

View File

@ -15,8 +15,8 @@ import net.Indyuce.mmoitems.api.crafting.IngredientInventory.IngredientLookupMod
import net.Indyuce.mmoitems.api.crafting.IngredientInventory.PlayerIngredient;
import net.Indyuce.mmoitems.api.crafting.ingredient.Ingredient;
import net.Indyuce.mmoitems.api.crafting.ingredient.MMOItemIngredient;
import net.Indyuce.mmoitems.api.item.LiveMMOItem;
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
import net.Indyuce.mmoitems.api.item.internal.ConfigItem;
import net.Indyuce.mmoitems.api.item.mmoitem.LiveMMOItem;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.api.util.message.Message;
import net.Indyuce.mmoitems.stat.data.UpgradeData;

View File

@ -1,41 +1,44 @@
package net.Indyuce.mmoitems.api.crafting.trigger;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.mmogroup.mmolib.api.MMOLineConfig;
import net.mmogroup.mmolib.api.util.SmartGive;
import org.apache.commons.lang.Validate;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.mmogroup.mmolib.api.MMOLineConfig;
import net.mmogroup.mmolib.api.util.SmartGive;
public class MMOItemTrigger extends Trigger {
private final Type type;
private final String id;
private final int amount;
private final MMOItemTemplate template;
private final int amount;
public MMOItemTrigger(MMOLineConfig config) {
super("mmoitem");
public MMOItemTrigger(MMOLineConfig config) {
super("mmoitem");
config.validate("type", "id");
config.validate("type", "id");
String format = config.getString("type").toUpperCase().replace("-", "_").replace(" ", "_");
Validate.isTrue(MMOItems.plugin.getTypes().has(format), "Could not find item type " + format);
type = MMOItems.plugin.getTypes().get(format);
String format = config.getString("type").toUpperCase().replace("-", "_").replace(" ", "_");
Validate.isTrue(MMOItems.plugin.getTypes().has(format), "Could not find item type with ID '" + format + "'");
Type type = MMOItems.plugin.getTypes().get(format);
id = config.getString("id").replace("-", "_").toUpperCase();
amount = config.args().length > 0 ? Math.max(1, Integer.parseInt(config.args()[0])) : 1;
Validate.isTrue(type.getConfigFile().getConfig().contains(id), "Could not find item id " + id);
}
String id = config.getString("id").replace("-", "_").toUpperCase();
Validate.isTrue(MMOItems.plugin.getItems().hasTemplate(type, id), "Could not find MMOItem with ID '" + id + "'");
@Override
public void whenCrafting(PlayerData data) {
ItemStack item = MMOItems.plugin.getItems().getItem(type, id);
if (item == null || item.getType() == Material.AIR)
return;
template = MMOItems.plugin.getItems().getTemplate(type, id);
amount = config.args().length > 0 ? Math.max(1, Integer.parseInt(config.args()[0])) : 1;
}
item.setAmount(amount);
if (item != null && item.getType() != Material.AIR)
new SmartGive(data.getPlayer()).give(item);
}
@Override
public void whenCrafting(PlayerData data) {
ItemStack item = template.newBuilder(data.getRPG()).build().newBuilder().build();
if (item == null || item.getType() == Material.AIR)
return;
item.setAmount(amount);
if (item != null && item.getType() != Material.AIR)
new SmartGive(data.getPlayer()).give(item);
}
}

View File

@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.droptable.item.BlockDropItem;
import net.Indyuce.mmoitems.api.droptable.item.DropItem;
import net.Indyuce.mmoitems.api.droptable.item.MMOItemDropItem;
public class DropTable {

View File

@ -3,7 +3,6 @@ package net.Indyuce.mmoitems.api.droptable.item;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.droptable.DropItem;
public class BlockDropItem extends DropItem {
private final int blockId;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.droptable;
package net.Indyuce.mmoitems.api.droptable.item;
import java.util.Random;

View File

@ -5,7 +5,6 @@ import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.droptable.DropItem;
import net.Indyuce.mmoitems.api.util.RandomAmount;
import net.mmogroup.mmolib.api.item.NBTItem;

View File

@ -15,10 +15,10 @@ import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.interaction.util.DurabilityItem;
import net.Indyuce.mmoitems.api.item.LiveMMOItem;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.VolatileMMOItem;
import net.Indyuce.mmoitems.api.item.plugin.identify.IdentifiedItem;
import net.Indyuce.mmoitems.api.item.internal.identify.IdentifiedItem;
import net.Indyuce.mmoitems.api.item.mmoitem.LiveMMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.VolatileMMOItem;
import net.Indyuce.mmoitems.api.util.message.Message;
import net.Indyuce.mmoitems.comp.flags.FlagPlugin.CustomFlag;
import net.Indyuce.mmoitems.stat.data.PotionEffectListData;

View File

@ -7,8 +7,8 @@ import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.LiveMMOItem;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.LiveMMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.util.message.Message;
import net.Indyuce.mmoitems.stat.data.GemSocketsData;
import net.Indyuce.mmoitems.stat.data.GemstoneData;

View File

@ -15,8 +15,8 @@ import net.Indyuce.mmoitems.api.interaction.weapon.untargeted.Lute;
import net.Indyuce.mmoitems.api.interaction.weapon.untargeted.Musket;
import net.Indyuce.mmoitems.api.interaction.weapon.untargeted.Staff;
import net.Indyuce.mmoitems.api.interaction.weapon.untargeted.Whip;
import net.Indyuce.mmoitems.api.item.LiveMMOItem;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.LiveMMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.comp.flags.FlagPlugin.CustomFlag;
import net.Indyuce.mmoitems.stat.data.CommandData;

View File

@ -0,0 +1,62 @@
package net.Indyuce.mmoitems.api.item;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Predicate;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
import net.Indyuce.mmoitems.api.player.RPGPlayer;
public class LootBuilder {
/*
* not defined at the beginning to save extra performance, if there are 100+
* templates this be pretty violent. TODO make type reference necessary?
*/
private final Collection<MMOItemTemplate> all;
/*
* options required to generate random loot
*/
private final ItemTier itemTier;
private final int itemLevel;
public LootBuilder(RPGPlayer player, ItemTier itemTier) {
itemLevel = MMOItems.plugin.getItems().rollLevel(player.getLevel());
this.itemTier = itemTier;
all = MMOItems.plugin.getItems().collectTemplates();
}
public LootBuilder(RPGPlayer player) {
itemLevel = MMOItems.plugin.getItems().rollLevel(player.getLevel());
itemTier = MMOItems.plugin.getItems().rollTier();
all = MMOItems.plugin.getItems().collectTemplates();
}
public LootBuilder(int itemLevel, ItemTier itemTier) {
this.itemLevel = itemLevel;
this.itemTier = itemTier;
all = MMOItems.plugin.getItems().collectTemplates();
}
public int count() {
return all.size();
}
public LootBuilder applyFilter(Predicate<MMOItemTemplate> filter) {
all.removeIf(not(filter));
return this;
}
public MMOItem rollLoot() {
Optional<MMOItemTemplate> found = all.stream().findAny();
return found.isPresent() ? found.get().newBuilder(itemLevel, itemTier).build() : null;
}
private <T> Predicate<T> not(Predicate<T> predicate) {
return t -> !predicate.test(t);
}
}

View File

@ -16,7 +16,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.util.StatFormat;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.data.MaterialData;
@ -30,7 +30,7 @@ import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.item.ItemTag;
import net.mmogroup.mmolib.api.item.NBTItem;
public class MMOItemBuilder {
public class ItemStackBuilder {
private MMOItem mmoitem;
private final ItemStack item;
@ -47,7 +47,7 @@ public class MMOItemBuilder {
* @param mmoitem
* The mmoitem you want to build
*/
public MMOItemBuilder(MMOItem mmoitem) {
public ItemStackBuilder(MMOItem mmoitem) {
this.mmoitem = mmoitem;
item = new ItemStack(

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item.plugin;
package net.Indyuce.mmoitems.api.item.internal;
import java.util.ArrayList;
import java.util.Arrays;
@ -12,9 +12,9 @@ import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import net.Indyuce.mmoitems.api.item.plugin.crafting.CraftingRecipeDisplay;
import net.Indyuce.mmoitems.api.item.plugin.crafting.QueueItemDisplay;
import net.Indyuce.mmoitems.api.item.plugin.crafting.UpgradingRecipeDisplay;
import net.Indyuce.mmoitems.api.item.internal.crafting.CraftingRecipeDisplay;
import net.Indyuce.mmoitems.api.item.internal.crafting.QueueItemDisplay;
import net.Indyuce.mmoitems.api.item.internal.crafting.UpgradingRecipeDisplay;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.version.VersionMaterial;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item.plugin;
package net.Indyuce.mmoitems.api.item.internal;
import java.lang.reflect.Field;
import java.util.ArrayList;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item.plugin;
package net.Indyuce.mmoitems.api.item.internal;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item.plugin.crafting;
package net.Indyuce.mmoitems.api.item.internal.crafting;
import java.text.DecimalFormat;
import java.util.ArrayList;
@ -18,7 +18,7 @@ import net.Indyuce.mmoitems.api.crafting.ConditionalDisplay;
import net.Indyuce.mmoitems.api.crafting.condition.Condition.CheckedCondition;
import net.Indyuce.mmoitems.api.crafting.recipe.CraftingRecipe;
import net.Indyuce.mmoitems.api.crafting.recipe.RecipeInfo;
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
import net.Indyuce.mmoitems.api.item.internal.ConfigItem;
import net.Indyuce.mmoitems.api.util.message.Message;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.item.ItemTag;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item.plugin.crafting;
package net.Indyuce.mmoitems.api.item.internal.crafting;
import java.util.ArrayList;
import java.util.HashMap;
@ -13,7 +13,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import net.Indyuce.mmoitems.api.crafting.CraftingStatus.CraftingQueue.CraftingInfo;
import net.Indyuce.mmoitems.api.crafting.recipe.CraftingRecipe;
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
import net.Indyuce.mmoitems.api.item.internal.ConfigItem;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.item.ItemTag;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item.plugin.crafting;
package net.Indyuce.mmoitems.api.item.internal.crafting;
import java.util.ArrayList;
import java.util.HashMap;
@ -16,7 +16,7 @@ import net.Indyuce.mmoitems.api.crafting.ConditionalDisplay;
import net.Indyuce.mmoitems.api.crafting.condition.Condition.CheckedCondition;
import net.Indyuce.mmoitems.api.crafting.recipe.RecipeInfo;
import net.Indyuce.mmoitems.api.crafting.recipe.UpgradingRecipe;
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
import net.Indyuce.mmoitems.api.item.internal.ConfigItem;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.item.ItemTag;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item.plugin.identify;
package net.Indyuce.mmoitems.api.item.internal.identify;
import java.io.ByteArrayInputStream;
import java.io.IOException;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item.plugin.identify;
package net.Indyuce.mmoitems.api.item.internal.identify;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
@ -17,9 +17,9 @@ import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.VolatileMMOItem;
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
import net.Indyuce.mmoitems.api.item.internal.ConfigItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.VolatileMMOItem;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.MMOLib;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item;
package net.Indyuce.mmoitems.api.item.mmoitem;
import java.util.logging.Level;

View File

@ -1,11 +1,11 @@
package net.Indyuce.mmoitems.api.item;
package net.Indyuce.mmoitems.api.item.mmoitem;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
@ -71,8 +71,8 @@ public class MMOItem {
return stats.keySet();
}
public MMOItemBuilder newBuilder() {
return new MMOItemBuilder(this);
public ItemStackBuilder newBuilder() {
return new ItemStackBuilder(this);
}
/***

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item;
package net.Indyuce.mmoitems.api.item.mmoitem;
import net.mmogroup.mmolib.api.item.NBTItem;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.item;
package net.Indyuce.mmoitems.api.item.mmoitem;
import java.util.logging.Level;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.itemgen;
package net.Indyuce.mmoitems.api.item.template;
import java.util.ArrayList;
import java.util.Collection;
@ -7,19 +7,20 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.itemgen.GenerationTemplate.TemplateOption;
import net.Indyuce.mmoitems.api.itemgen.NameModifier.ModifierType;
import net.Indyuce.mmoitems.api.itemgen.tier.RolledTier;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate.TemplateOption;
import net.Indyuce.mmoitems.api.item.template.NameModifier.ModifierType;
import net.Indyuce.mmoitems.stat.data.StringData;
import net.Indyuce.mmoitems.stat.data.type.Mergeable;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
public class GeneratedItemBuilder {
public class MMOItemBuilder {
private final int level;
private final MMOItem mmoitem;
private final RolledTier tier;
private final ItemTier tier;
/*
* capacity is not final because it is lowered as modifiers are applied
@ -35,20 +36,20 @@ public class GeneratedItemBuilder {
/*
* instance is created everytime an item is being randomly generated.
*/
public GeneratedItemBuilder(GenerationTemplate template, int level, RolledTier tier) {
public MMOItemBuilder(MMOItemTemplate template, int level, ItemTier tier) {
this.level = level;
this.tier = tier;
this.capacity = tier.getCapacity();
this.capacity = (tier != null ? tier.getCapacity() : MMOItems.plugin.getLanguage().defaultItemCapacity).calculate(level);
this.mmoitem = new MMOItem(template.getType(), template.getId());
// apply base item data
template.getBaseItemData().entrySet().forEach(entry -> applyData(entry.getKey(), entry.getValue().randomize(this)));
if (!tier.isDefault())
mmoitem.setData(ItemStat.TIER, new StringData(tier.getTier().getId()));
if (tier != null)
mmoitem.setData(ItemStat.TIER, new StringData(tier.getId()));
// roll item gen modifiers
for (GenerationModifier modifier : rollModifiers(template)) {
for (TemplateModifier modifier : rollModifiers(template)) {
// roll modifier change
if (!modifier.rollChance())
@ -73,7 +74,7 @@ public class GeneratedItemBuilder {
return capacity;
}
public RolledTier getTier() {
public ItemTier getTier() {
return tier;
}
@ -112,11 +113,11 @@ public class GeneratedItemBuilder {
nameModifiers.add(modifier);
}
private Collection<GenerationModifier> rollModifiers(GenerationTemplate template) {
private Collection<TemplateModifier> rollModifiers(MMOItemTemplate template) {
if (!template.hasOption(TemplateOption.ROLL_MODIFIER_CHECK_ORDER))
return template.getModifiers();
List<GenerationModifier> modifiers = new ArrayList<>(template.getModifiers());
List<TemplateModifier> modifiers = new ArrayList<>(template.getModifiers());
Collections.shuffle(modifiers);
return modifiers;
}

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.itemgen;
package net.Indyuce.mmoitems.api.item.template;
import java.util.HashMap;
import java.util.HashSet;
@ -11,22 +11,23 @@ import org.apache.commons.lang.Validate;
import org.bukkit.configuration.ConfigurationSection;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.itemgen.tier.RolledTier;
import net.Indyuce.mmoitems.api.player.RPGPlayer;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
public class GenerationTemplate {
public class MMOItemTemplate {
private final String id;
private final Type type;
// base item data
private final Map<ItemStat, RandomStatData> base = new HashMap<>();
private final Set<GenerationModifier> modifiers = new LinkedHashSet<>();
private final Set<TemplateModifier> modifiers = new LinkedHashSet<>();
private final Set<TemplateOption> options = new HashSet<>();
public GenerationTemplate(ConfigurationSection config) {
public MMOItemTemplate(ConfigurationSection config) {
Validate.notNull(config, "Could not load item gen template config");
this.id = config.getName().toUpperCase().replace("-", "_").replace(" ", "_");
@ -46,7 +47,7 @@ public class GenerationTemplate {
if (config.contains("modifiers"))
for (String key : config.getConfigurationSection("modifiers").getKeys(false))
try {
modifiers.add(new GenerationModifier(MMOItems.plugin.getItemGenerator(), config.getConfigurationSection("modifiers." + key)));
modifiers.add(new TemplateModifier(MMOItems.plugin.getItems(), config.getConfigurationSection("modifiers." + key)));
} catch (IllegalArgumentException exception) {
MMOItems.plugin.getLogger().log(Level.INFO, "An error occured while trying to load modifier '" + key
+ "' from item gen template '" + id + "': " + exception.getMessage());
@ -70,7 +71,7 @@ public class GenerationTemplate {
return base;
}
public Set<GenerationModifier> getModifiers() {
public Set<TemplateModifier> getModifiers() {
return modifiers;
}
@ -92,14 +93,14 @@ public class GenerationTemplate {
* item to
* @return A random item builder which scales on the player's level.
*/
public GeneratedItemBuilder newBuilder(RPGPlayer player) {
int itemLevel = MMOItems.plugin.getItemGenerator().rollLevel(player.getLevel());
RolledTier itemTier = MMOItems.plugin.getItemGenerator().rollTier(itemLevel);
public MMOItemBuilder newBuilder(RPGPlayer player) {
int itemLevel = MMOItems.plugin.getItems().rollLevel(player.getLevel());
ItemTier itemTier = MMOItems.plugin.getItems().rollTier();
return newBuilder(itemLevel, itemTier);
}
public GeneratedItemBuilder newBuilder(int itemLevel, RolledTier itemTier) {
return new GeneratedItemBuilder(this, itemLevel, itemTier);
public MMOItemBuilder newBuilder(int itemLevel, ItemTier itemTier) {
return new MMOItemBuilder(this, itemLevel, itemTier);
}
public enum TemplateOption {

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.itemgen;
package net.Indyuce.mmoitems.api.item.template;
import org.apache.commons.lang.Validate;
import org.bukkit.configuration.ConfigurationSection;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmoitems.api.itemgen;
package net.Indyuce.mmoitems.api.item.template;
import java.util.HashMap;
import java.util.Map;
@ -9,11 +9,12 @@ import org.apache.commons.lang.Validate;
import org.bukkit.configuration.ConfigurationSection;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.itemgen.NameModifier.ModifierType;
import net.Indyuce.mmoitems.manager.ItemGenManager;
import net.Indyuce.mmoitems.api.item.template.NameModifier.ModifierType;
import net.Indyuce.mmoitems.manager.ItemManager;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
public class GenerationModifier {
public class TemplateModifier {
/*
* not really used internally apart from letting the user locate the mod in
@ -27,7 +28,7 @@ public class GenerationModifier {
private static final Random random = new Random();
public GenerationModifier(ConfigurationSection config) {
public TemplateModifier(ConfigurationSection config) {
this(null, config);
}
@ -41,7 +42,7 @@ public class GenerationModifier {
* @param config
* The configuration section to load the modifier from
*/
public GenerationModifier(ItemGenManager manager, ConfigurationSection config) {
public TemplateModifier(ItemManager manager, ConfigurationSection config) {
Validate.notNull(config, "Could not read config");
id = config.getName().toLowerCase().replace("_", "-");
@ -52,7 +53,7 @@ public class GenerationModifier {
if (manager != null && config.contains("parent")) {
String parentFormat = config.get("parent").toString().toLowerCase().replace("_", "-").replace(" ", "_");
Validate.isTrue(manager.hasModifier(parentFormat), "Could not find public modifier with ID '" + parentFormat + "'");
GenerationModifier parent = manager.getModifier(parentFormat);
TemplateModifier parent = manager.getModifier(parentFormat);
chance = Math.max(Math.min(config.getDouble("chance", parent.chance), 1), 0);
weight = config.getDouble("weight", parent.weight);

View File

@ -1,13 +1,13 @@
package net.Indyuce.mmoitems.api.itemgen.loot.restriction;
package net.Indyuce.mmoitems.api.item.template.loot;
import java.util.function.Predicate;
import net.Indyuce.mmoitems.api.itemgen.GenerationTemplate;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
import net.Indyuce.mmoitems.api.player.RPGPlayer;
import net.Indyuce.mmoitems.stat.data.StringListData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
public class ClassFilter implements Predicate<GenerationTemplate> {
public class ClassFilter implements Predicate<MMOItemTemplate> {
private final String name;
public ClassFilter(RPGPlayer player) {
@ -19,7 +19,7 @@ public class ClassFilter implements Predicate<GenerationTemplate> {
}
@Override
public boolean test(GenerationTemplate template) {
public boolean test(MMOItemTemplate template) {
if (!template.getBaseItemData().containsKey(ItemStat.REQUIRED_CLASS))
return true;

View File

@ -0,0 +1,19 @@
package net.Indyuce.mmoitems.api.item.template.loot;
import java.util.function.Predicate;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
public class TypeFilter implements Predicate<MMOItemTemplate> {
private final Type type;
public TypeFilter(Type type) {
this.type = type;
}
@Override
public boolean test(MMOItemTemplate template) {
return template.getType().equals(type);
}
}

View File

@ -1,63 +0,0 @@
package net.Indyuce.mmoitems.api.itemgen.loot;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Predicate;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.itemgen.GenerationTemplate;
import net.Indyuce.mmoitems.api.itemgen.tier.RolledTier;
import net.Indyuce.mmoitems.api.player.RPGPlayer;
public class LootBuilder {
/*
* not defined at the beginning to save extra performance, if there are 100+
* templates this be pretty violent. TODO make type reference necessary?
*/
private final Collection<GenerationTemplate> all;
/*
* options required to generate random loot
*/
private final RolledTier itemTier;
private final int itemLevel;
public LootBuilder(RPGPlayer player, ItemTier itemTier) {
itemLevel = MMOItems.plugin.getItemGenerator().rollLevel(player.getLevel());
this.itemTier = MMOItems.plugin.getItemGenerator().getTierInfo(itemTier).roll(itemLevel);
all = MMOItems.plugin.getItemGenerator().getTemplates();
}
public LootBuilder(RPGPlayer player) {
itemLevel = MMOItems.plugin.getItemGenerator().rollLevel(player.getLevel());
itemTier = MMOItems.plugin.getItemGenerator().rollTier(itemLevel);
all = MMOItems.plugin.getItemGenerator().getTemplates();
}
public LootBuilder(int itemLevel, RolledTier itemTier) {
this.itemLevel = itemLevel;
this.itemTier = itemTier;
all = MMOItems.plugin.getItemGenerator().getTemplates();
}
public int count() {
return all.size();
}
public LootBuilder applyFilter(Predicate<GenerationTemplate> filter) {
all.removeIf(not(filter));
return this;
}
public MMOItem rollLoot() {
Optional<GenerationTemplate> found = all.stream().findAny();
return found.isPresent() ? found.get().newBuilder(itemLevel, itemTier).build() : null;
}
private <T> Predicate<T> not(Predicate<T> predicate) {
return t -> !predicate.test(t);
}
}

View File

@ -1,19 +0,0 @@
package net.Indyuce.mmoitems.api.itemgen.loot.restriction;
import java.util.function.Predicate;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.itemgen.GenerationTemplate;
public class TypeFilter implements Predicate<GenerationTemplate> {
private final Type type;
public TypeFilter(Type type) {
this.type = type;
}
@Override
public boolean test(GenerationTemplate template) {
return template.getType().equals(type);
}
}

View File

@ -1,61 +0,0 @@
package net.Indyuce.mmoitems.api.itemgen.tier;
import org.apache.commons.lang.Validate;
import org.bukkit.configuration.ConfigurationSection;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.itemgen.NumericStatFormula;
public class RandomTierInfo {
private final ItemTier tier;
private final double chance;
private final NumericStatFormula capacity;
public RandomTierInfo(ConfigurationSection config) {
Validate.notNull(config, "Config cannot be null");
String tierFormat = config.getName().toUpperCase().replace("-", "_").replace(" ", "_");
Validate.isTrue(MMOItems.plugin.getTiers().has(tierFormat), "Could not find tier with ID '" + tierFormat + "'");
tier = MMOItems.plugin.getTiers().get(tierFormat);
chance = config.getDouble("chance");
Validate.isTrue(chance > 0 && chance < 1, "Chance must be stricly between 0 and 1");
capacity = new NumericStatFormula(config.get("capacity"));
}
/*
* constructor for the default tier: there is no need for chance or tier
* instance
*/
public RandomTierInfo(NumericStatFormula capacity) {
this(null, 0, capacity);
}
public RandomTierInfo(ItemTier tier, double chance, NumericStatFormula capacity) {
this.tier = tier;
this.chance = chance;
this.capacity = capacity;
}
public boolean isDefault() {
return tier == null;
}
public ItemTier getTier() {
return tier;
}
public NumericStatFormula getCapacity() {
return capacity;
}
public double getChance() {
return chance;
}
public RolledTier roll(int itemLevel) {
return new RolledTier(this, itemLevel);
}
}

View File

@ -1,25 +0,0 @@
package net.Indyuce.mmoitems.api.itemgen.tier;
import net.Indyuce.mmoitems.api.ItemTier;
public class RolledTier {
private final ItemTier tier;
private final double capacity;
public RolledTier(RandomTierInfo info, int itemLevel) {
this.tier = info.getTier();
this.capacity = info.getCapacity().calculate(itemLevel);
}
public boolean isDefault() {
return tier == null;
}
public ItemTier getTier() {
return tier;
}
public double getCapacity() {
return capacity;
}
}

View File

@ -32,7 +32,7 @@ import net.Indyuce.mmoitems.api.ability.Ability.CastingMode;
import net.Indyuce.mmoitems.api.ability.AbilityResult;
import net.Indyuce.mmoitems.api.crafting.CraftingStatus;
import net.Indyuce.mmoitems.api.event.AbilityUseEvent;
import net.Indyuce.mmoitems.api.item.VolatileMMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.VolatileMMOItem;
import net.Indyuce.mmoitems.api.player.PlayerStats.CachedStats;
import net.Indyuce.mmoitems.comp.flags.FlagPlugin.CustomFlag;
import net.Indyuce.mmoitems.comp.inventory.PlayerInventory.EquippedItem;

View File

@ -6,7 +6,7 @@ import java.util.Map;
import org.bukkit.entity.Player;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.item.VolatileMMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.VolatileMMOItem;
import net.Indyuce.mmoitems.stat.type.AttributeStat;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.stat.StatInstance;

View File

@ -1,11 +1,13 @@
package net.Indyuce.mmoitems.api.itemgen;
package net.Indyuce.mmoitems.api.util;
import java.util.Random;
import org.apache.commons.lang.Validate;
import org.bukkit.configuration.ConfigurationSection;
import net.Indyuce.mmoitems.api.item.template.MMOItemBuilder;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
public class NumericStatFormula implements RandomStatData {
@ -31,7 +33,7 @@ public class NumericStatFormula implements RandomStatData {
base = config.getDouble("base");
scale = config.getDouble("scale");
spread = config.getDouble("spread");
maxSpread = config.getDouble("max-spread");
maxSpread = config.getDouble("max-spread", .3);
Validate.isTrue(spread >= 0, "Spread must be positive");
Validate.isTrue(maxSpread >= 0, "Max spread must be positive");
@ -73,7 +75,7 @@ public class NumericStatFormula implements RandomStatData {
}
@Override
public StatData randomize(GeneratedItemBuilder builder) {
public StatData randomize(MMOItemBuilder builder) {
return new DoubleData(calculate(builder.getLevel()));
}
}

View File

@ -1,8 +1,33 @@
package net.Indyuce.mmoitems.command;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffectType;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.PluginUpdate;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.UpdaterData;
@ -10,13 +35,12 @@ import net.Indyuce.mmoitems.api.ability.Ability;
import net.Indyuce.mmoitems.api.ability.Ability.CastingMode;
import net.Indyuce.mmoitems.api.crafting.CraftingStation;
import net.Indyuce.mmoitems.api.droptable.item.MMOItemDropItem;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.plugin.identify.IdentifiedItem;
import net.Indyuce.mmoitems.api.itemgen.GenerationTemplate;
import net.Indyuce.mmoitems.api.itemgen.loot.LootBuilder;
import net.Indyuce.mmoitems.api.itemgen.loot.restriction.ClassFilter;
import net.Indyuce.mmoitems.api.itemgen.loot.restriction.TypeFilter;
import net.Indyuce.mmoitems.api.itemgen.tier.RolledTier;
import net.Indyuce.mmoitems.api.item.LootBuilder;
import net.Indyuce.mmoitems.api.item.internal.identify.IdentifiedItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
import net.Indyuce.mmoitems.api.item.template.loot.ClassFilter;
import net.Indyuce.mmoitems.api.item.template.loot.TypeFilter;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.api.player.RPGPlayer;
import net.Indyuce.mmoitems.api.util.RandomAmount;
@ -33,25 +57,6 @@ import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.item.ItemTag;
import net.mmogroup.mmolib.api.item.NBTItem;
import net.mmogroup.mmolib.api.util.SmartGive;
import org.apache.commons.lang.Validate;
import org.bukkit.*;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffectType;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MMOItemsCommand implements CommandExecutor {
private static final Random random = new Random();
@ -115,22 +120,24 @@ public class MMOItemsCommand implements CommandExecutor {
RPGPlayer rpgPlayer = PlayerData.get(target).getRPG();
final int itemLevel = handler.hasArgument("level") ? Integer.parseInt(handler.getValue("level"))
: (handler.hasArgument("matchlevel")
? MMOItems.plugin.getItemGenerator().rollLevel(rpgPlayer.getLevel())
? MMOItems.plugin.getItems().rollLevel(rpgPlayer.getLevel())
: 1 + random.nextInt(100));
final RolledTier itemTier = handler.hasArgument("tier") ? MMOItems.plugin.getItemGenerator()
.getTierInfo(MMOItems.plugin.getTiers()
.getOrThrow(handler.getValue("tier").toUpperCase().replace("-", "_")))
.roll(itemLevel) : MMOItems.plugin.getItemGenerator().rollTier(itemLevel);
final ItemTier itemTier = handler.hasArgument("tier")
? MMOItems.plugin.getTiers().getOrThrow(handler.getValue("tier").toUpperCase().replace("-", "_"))
: MMOItems.plugin.getItems().rollTier();
// no need to use a LootBuilder
if (handler.hasArgument("id")) {
Validate.isTrue(handler.hasArgument("type"), "You must specify a type as well.");
String format = handler.getValue("type");
Validate.isTrue(Type.isValid(format), "Could not find type with ID '" + format + "'");
Type type = Type.get(format);
String id = handler.getValue("id").toUpperCase().replace("-", "_");
Validate.isTrue(MMOItems.plugin.getItemGenerator().hasTemplate(id),
"Could not find gen item with ID '" + id + "'");
GenerationTemplate template = MMOItems.plugin.getItemGenerator().getTemplate(id);
Validate.isTrue(MMOItems.plugin.getItems().hasTemplate(type, id), "Could not find gen item with ID '" + id + "'");
MMOItemTemplate template = MMOItems.plugin.getItems().getTemplate(type, id);
ItemStack item = template.newBuilder(itemLevel, itemTier).build().newBuilder().build();
Validate.isTrue(item != null && item.getType() != Material.AIR,
"Could not generate gen item with ID '" + id + "'");
Validate.isTrue(item != null && item.getType() != Material.AIR, "Could not generate gen item with ID '" + id + "'");
new SmartGive(give).give(item);
return true;
}
@ -558,7 +565,7 @@ public class MMOItemsCommand implements CommandExecutor {
MMOItems.plugin.getTiers().reload();
MMOItems.plugin.getSets().reload();
MMOItems.plugin.getUpgrades().reload();
MMOItems.plugin.getItemGenerator().reload();
MMOItems.plugin.getItems().reload();
if (MMOLib.plugin.getVersion().isStrictlyHigher(1, 12)) {
MMOItems.plugin.getWorldGen().reload();
MMOItems.plugin.getCustomBlocks().reload();

View File

@ -10,7 +10,7 @@ import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.util.message.Message;
import net.Indyuce.mmoitems.gui.edition.ItemUpdaterEdition;
import net.mmogroup.mmolib.MMOLib;

View File

@ -4,31 +4,35 @@ import org.apache.commons.lang.Validate;
import net.Indyuce.mmocore.api.loot.LootBuilder;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.itemgen.GenerationTemplate;
import net.Indyuce.mmoitems.api.itemgen.tier.RolledTier;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
import net.Indyuce.mmoitems.api.player.RPGPlayer;
import net.mmogroup.mmolib.api.MMOLineConfig;
public class ItemTemplateDropItem extends ItemGenerationDropItem {
private final GenerationTemplate template;
private final MMOItemTemplate template;
public ItemTemplateDropItem(MMOLineConfig config) {
super(config);
config.validate("id");
config.validate("type", "id");
String id = config.getString("id");
Validate.isTrue(MMOItems.plugin.getItemGenerator().hasTemplate(id), "Could not find gen template with ID '" + id + "'");
template = MMOItems.plugin.getItemGenerator().getTemplate(id);
String format = config.getString("type").toUpperCase().replace("-", "_").replace(" ", "_");
Validate.isTrue(MMOItems.plugin.getTypes().has(format), "Could not find item type with ID '" + format + "'");
Type type = MMOItems.plugin.getTypes().get(format);
String id = config.getString("id").replace("-", "_").toUpperCase();
Validate.isTrue(MMOItems.plugin.getItems().hasTemplate(type, id), "Could not find MMOItem with ID '" + id + "'");
template = MMOItems.plugin.getItems().getTemplate(type, id);
}
@Override
public void collect(LootBuilder builder) {
RPGPlayer rpgPlayer = builder.getEntity().getMMOPlayerData().getMMOItems().getRPG();
int itemLevel = MMOItems.plugin.getItemGenerator().rollLevel(matchLevel ? rpgPlayer.getLevel() : this.level);
RolledTier itemTier = this.tier != null ? new RolledTier(MMOItems.plugin.getItemGenerator().getTierInfo(this.tier), itemLevel)
: MMOItems.plugin.getItemGenerator().rollTier(itemLevel);
int itemLevel = MMOItems.plugin.getItems().rollLevel(matchLevel ? rpgPlayer.getLevel() : this.level);
ItemTier itemTier = this.tier != null ? this.tier : MMOItems.plugin.getItems().rollTier();
builder.addLoot(template.newBuilder(itemLevel, itemTier).build().newBuilder().build());
}

View File

@ -5,11 +5,11 @@ import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmocore.api.loot.LootBuilder;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.itemgen.loot.restriction.ClassFilter;
import net.Indyuce.mmoitems.api.itemgen.loot.restriction.TypeFilter;
import net.Indyuce.mmoitems.api.itemgen.tier.RolledTier;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.template.loot.ClassFilter;
import net.Indyuce.mmoitems.api.item.template.loot.TypeFilter;
import net.Indyuce.mmoitems.api.player.RPGPlayer;
import net.mmogroup.mmolib.api.MMOLineConfig;
@ -38,11 +38,10 @@ public class RandomItemDropItem extends ItemGenerationDropItem {
public void collect(LootBuilder builder) {
RPGPlayer rpgPlayer = builder.getEntity().getMMOPlayerData().getMMOItems().getRPG();
int itemLevel = MMOItems.plugin.getItemGenerator().rollLevel(matchLevel ? rpgPlayer.getLevel() : this.level);
RolledTier itemTier = this.tier != null ? new RolledTier(MMOItems.plugin.getItemGenerator().getTierInfo(this.tier), itemLevel)
: MMOItems.plugin.getItemGenerator().rollTier(itemLevel);
int itemLevel = MMOItems.plugin.getItems().rollLevel(matchLevel ? rpgPlayer.getLevel() : this.level);
ItemTier itemTier = this.tier != null ? this.tier : MMOItems.plugin.getItems().rollTier();
net.Indyuce.mmoitems.api.itemgen.loot.LootBuilder loot = new net.Indyuce.mmoitems.api.itemgen.loot.LootBuilder(itemLevel, itemTier);
net.Indyuce.mmoitems.api.item.LootBuilder loot = new net.Indyuce.mmoitems.api.item.LootBuilder(itemLevel, itemTier);
if (matchClass)
loot.applyFilter(new ClassFilter(rpgPlayer));

View File

@ -20,7 +20,7 @@ import io.lumine.xikage.mythicmobs.io.MythicLineConfig;
import io.lumine.xikage.mythicmobs.skills.placeholders.Placeholder;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.droptable.DropItem;
import net.Indyuce.mmoitems.api.droptable.item.DropItem;
import net.Indyuce.mmoitems.api.droptable.item.MMOItemDropItem;
import net.Indyuce.mmoitems.api.player.PlayerData;

View File

@ -17,7 +17,7 @@ import net.Indyuce.mmoitems.api.crafting.ingredient.Ingredient.CheckedIngredient
import net.Indyuce.mmoitems.api.crafting.recipe.CraftingRecipe;
import net.Indyuce.mmoitems.api.crafting.recipe.RecipeInfo;
import net.Indyuce.mmoitems.api.crafting.recipe.UpgradingRecipe;
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
import net.Indyuce.mmoitems.api.item.internal.ConfigItem;
import net.Indyuce.mmoitems.api.util.message.Message;
public class CraftingStationPreview extends PluginInventory {

View File

@ -23,7 +23,7 @@ import net.Indyuce.mmoitems.api.crafting.recipe.CraftingRecipe;
import net.Indyuce.mmoitems.api.crafting.recipe.Recipe;
import net.Indyuce.mmoitems.api.crafting.recipe.RecipeInfo;
import net.Indyuce.mmoitems.api.event.crafting.PlayerUseCraftingStationEvent;
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
import net.Indyuce.mmoitems.api.item.internal.ConfigItem;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.api.util.message.Message;
import net.Indyuce.mmoitems.listener.CustomSoundListener;

View File

@ -22,7 +22,7 @@ import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.ability.Ability;
import net.Indyuce.mmoitems.api.ability.Ability.CastingMode;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.item.ItemTag;

View File

@ -20,7 +20,7 @@ import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.ability.Ability;
import net.Indyuce.mmoitems.api.ability.Ability.CastingMode;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.item.ItemTag;
import net.mmogroup.mmolib.api.util.AltChar;

View File

@ -20,7 +20,7 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.data.ParticleData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.util.AltChar;

View File

@ -17,7 +17,7 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.item.ItemTag;

View File

@ -17,7 +17,7 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.recipe.CraftingType;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.MMOLib;

View File

@ -13,7 +13,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.gui.PluginInventory;
import net.mmogroup.mmolib.api.util.AltChar;

View File

@ -20,7 +20,7 @@ import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.Element;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.util.AltChar;

View File

@ -2,7 +2,7 @@ package net.Indyuce.mmoitems.gui.edition;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.type.InternalStat;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.MMOLib;

View File

@ -14,7 +14,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.UpdaterData;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.manager.UpdaterManager.KeepOption;
import net.mmogroup.mmolib.api.util.AltChar;
import net.mmogroup.mmolib.version.VersionMaterial;

View File

@ -20,7 +20,7 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.particle.api.ParticleType;
import net.Indyuce.mmoitems.stat.data.ParticleData;
import net.Indyuce.mmoitems.stat.type.ItemStat;

View File

@ -17,7 +17,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.util.AltChar;

View File

@ -21,7 +21,7 @@ import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.CustomSound;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.util.AltChar;

View File

@ -18,8 +18,8 @@ import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.plugin.NamedItemStack;
import net.Indyuce.mmoitems.api.item.internal.NamedItemStack;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.util.AltChar;

View File

@ -1,7 +1,7 @@
package net.Indyuce.mmoitems.gui.listener;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.gui.ItemBrowser;
import net.Indyuce.mmoitems.gui.PluginInventory;
import net.Indyuce.mmoitems.gui.edition.CraftingEdition;

View File

@ -3,7 +3,7 @@ package net.Indyuce.mmoitems.manager;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.block.CustomBlock;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.util.MushroomState;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.type.ItemStat;

View File

@ -1,20 +1,5 @@
package net.Indyuce.mmoitems.manager;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.ability.Ability;
import net.Indyuce.mmoitems.api.ability.Ability.CastingMode;
import net.Indyuce.mmoitems.api.item.plugin.ConfigItem;
import net.Indyuce.mmoitems.api.util.message.Message;
import net.Indyuce.mmoitems.stat.LuteAttackEffectStat.LuteAttackEffect;
import net.Indyuce.mmoitems.stat.StaffSpiritStat.StaffSpirit;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.util.AltChar;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.potion.PotionEffectType;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
@ -27,6 +12,23 @@ import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.logging.Level;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.potion.PotionEffectType;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.ability.Ability;
import net.Indyuce.mmoitems.api.ability.Ability.CastingMode;
import net.Indyuce.mmoitems.api.item.internal.ConfigItem;
import net.Indyuce.mmoitems.api.util.NumericStatFormula;
import net.Indyuce.mmoitems.api.util.message.Message;
import net.Indyuce.mmoitems.stat.LuteAttackEffectStat.LuteAttackEffect;
import net.Indyuce.mmoitems.stat.StaffSpiritStat.StaffSpirit;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.util.AltChar;
public class ConfigManager {
// cached config files
@ -36,8 +38,8 @@ public class ConfigManager {
public boolean abilityPlayerDamage, dodgeKnockbackEnabled, replaceMushroomDrops, worldGenEnabled, upgradeRequirementsCheck;
public String healIndicatorFormat, damageIndicatorFormat, abilitySplitter;
public DecimalFormat healIndicatorDecimalFormat, damageIndicatorDecimalFormat;
public double dodgeKnockbackForce, soulboundBaseDamage, soulboundPerLvlDamage;
public double dodgeKnockbackForce, soulboundBaseDamage, soulboundPerLvlDamage, levelSpread;
public NumericStatFormula defaultItemCapacity;
private static final Random random = new Random();
private static final String[] fileNames = { "abilities", "messages", "potion-effects", "stats", "items", "attack-effects" };
@ -72,8 +74,7 @@ public class ConfigManager {
String name = entries.nextElement().getName();
if (name.startsWith("default/crafting-stations/") && name.length() > "default/crafting-stations/".length())
Files.copy(MMOItems.plugin.getResource(name),
new File(MMOItems.plugin.getDataFolder() + "/crafting-stations", name.split("\\/")[2])
.toPath());
new File(MMOItems.plugin.getDataFolder() + "/crafting-stations", name.split("\\/")[2]).toPath());
}
jarFile.close();
} catch (IOException exception) {
@ -203,6 +204,16 @@ public class ConfigManager {
soulboundBaseDamage = MMOItems.plugin.getConfig().getDouble("soulbound.damage.base");
soulboundPerLvlDamage = MMOItems.plugin.getConfig().getDouble("soulbound.damage.per-lvl");
upgradeRequirementsCheck = MMOItems.plugin.getConfig().getBoolean("item-upgrade-requirements-check");
levelSpread = MMOItems.plugin.getConfig().getDouble("item-level-spread");
try {
defaultItemCapacity = new NumericStatFormula(MMOItems.plugin.getConfig().getConfigurationSection("default-item-capacity"));
} catch (IllegalArgumentException exception) {
defaultItemCapacity = new NumericStatFormula(5, .05, .1, .3);
MMOItems.plugin.getLogger().log(Level.INFO,
"An error occured while trying to load default capacity formula for the item generator, using default: "
+ exception.getMessage());
}
for (ConfigItem item : ConfigItem.values)
item.update(items.getConfig().getConfigurationSection(item.getId()));
@ -344,6 +355,7 @@ public class ConfigManager {
}
}
}
public static class YamlConverter {
private File file;
@ -357,7 +369,10 @@ public class ConfigManager {
public boolean convert() throws IOException {
if (!file.exists())
if (fileName.equalsIgnoreCase("block.yml") && new File(MMOItems.plugin.getDataFolder(), "custom-blocks.yml").exists()) { // this converts old custom-blocks.yml
if (fileName.equalsIgnoreCase("block.yml") && new File(MMOItems.plugin.getDataFolder(), "custom-blocks.yml").exists()) { // this
// converts
// old
// custom-blocks.yml
file.createNewFile(); // creates the file
YamlConfiguration oldConfig = YamlConfiguration.loadConfiguration(new File(MMOItems.plugin.getDataFolder(), "custom-blocks.yml"));
@ -367,10 +382,14 @@ public class ConfigManager {
for (String id : oldConfig.getKeys(false)) {
ConfigurationSection section = newConfig.getConfigurationSection(id);
section.set("material", "STONE"); // adds material
section.set("block-id", Integer.parseInt(id)); // adds block id
section.set("block-id", Integer.parseInt(id)); // adds
// block
// id
for (String node : section.getKeys(false)) {
Object value = section.get(node);
if (node.equalsIgnoreCase("display-name")) { // converts name format
if (node.equalsIgnoreCase("display-name")) { // converts
// name
// format
section.set("display-name", null);
section.set("name", value);
}

View File

@ -1,156 +0,0 @@
package net.Indyuce.mmoitems.manager;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Random;
import java.util.logging.Level;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.itemgen.GenerationModifier;
import net.Indyuce.mmoitems.api.itemgen.GenerationTemplate;
import net.Indyuce.mmoitems.api.itemgen.NumericStatFormula;
import net.Indyuce.mmoitems.api.itemgen.tier.RandomTierInfo;
import net.Indyuce.mmoitems.api.itemgen.tier.RolledTier;
public class ItemGenManager {
private final Map<String, GenerationTemplate> templates = new HashMap<>();
/*
* bank of item modifiers which can be used anywhere in generation templates
* to make item generation easier.
*/
private final Map<String, GenerationModifier> modifiers = new HashMap<>();
/*
* tiers which the item generator can use to determine how much modifier
* capacity an item has. plugin has a default capacity calculator in case
* none is specified by the user but it's best to configure it
*/
private final Map<ItemTier, RandomTierInfo> itemGenTiers = new LinkedHashMap<>();
private RandomTierInfo defaultTier;
/*
* config options that must be updated and that are cached here for easier
* calculations
*/
private double levelSpread;
private static final Random random = new Random();
public Collection<GenerationTemplate> getTemplates() {
return templates.values();
}
public Collection<GenerationModifier> getModifiers() {
return modifiers.values();
}
public boolean hasTemplate(String id) {
return templates.containsKey(id);
}
public boolean hasModifier(String id) {
return modifiers.containsKey(id);
}
public GenerationTemplate getTemplate(String id) {
return templates.get(id);
}
public GenerationModifier getModifier(String id) {
return modifiers.get(id);
}
public RandomTierInfo getTierInfo(ItemTier tier) {
return itemGenTiers.getOrDefault(tier, defaultTier);
}
public void reload() {
templates.clear();
itemGenTiers.clear();
modifiers.clear();
for (File file : new File(MMOItems.plugin.getDataFolder() + "/generator/modifiers").listFiles()) {
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
for (String key : config.getKeys(false))
try {
GenerationModifier modifier = new GenerationModifier(config.getConfigurationSection(key));
modifiers.put(modifier.getId(), modifier);
} catch (IllegalArgumentException exception) {
MMOItems.plugin.getLogger().log(Level.INFO,
"An error occured while trying to load item gen modifier '" + key + "': " + exception.getMessage());
}
}
for (File file : new File(MMOItems.plugin.getDataFolder() + "/generator/templates").listFiles()) {
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
for (String key : config.getKeys(false))
try {
GenerationTemplate template = new GenerationTemplate(config.getConfigurationSection(key));
templates.put(template.getId(), template);
} catch (IllegalArgumentException exception) {
MMOItems.plugin.getLogger().log(Level.INFO,
"An error occured while trying to load item gen template '" + key + "': " + exception.getMessage());
}
}
FileConfiguration config = new ConfigFile("/generator", "config").getConfig();
levelSpread = config.getDouble("item-level-spread");
for (String key : config.getConfigurationSection("tiers").getKeys(false))
if (!key.equalsIgnoreCase("default"))
try {
RandomTierInfo info = new RandomTierInfo(config.getConfigurationSection("tiers." + key));
itemGenTiers.put(info.getTier(), info);
} catch (IllegalArgumentException exception) {
MMOItems.plugin.getLogger().log(Level.INFO,
"An error occured while trying to load item gen tier capacity formula which ID '" + key + "': " + exception.getMessage());
}
try {
defaultTier = new RandomTierInfo(new NumericStatFormula(config.getConfigurationSection("tiers.default.capacity")));
} catch (IllegalArgumentException exception) {
defaultTier = new RandomTierInfo(new NumericStatFormula(5, .05, .1, .3));
MMOItems.plugin.getLogger().log(Level.INFO,
"An error occured while trying to load default capacity formula for the item generator, using default: "
+ exception.getMessage());
}
}
public RolledTier rollTier(int itemLevel) {
double s = 0;
for (RandomTierInfo tier : itemGenTiers.values()) {
if (random.nextDouble() < tier.getChance() / (1 - s))
return tier.roll(itemLevel);
s += tier.getChance();
}
// default tier
return defaultTier.roll(itemLevel);
}
/*
* formula to generate the item level. input is the player level and the
* level spread which corresponds to the standard deviation of a gaussian
* distribution centered on the player level
*/
public int rollLevel(int playerLevel) {
double found = random.nextGaussian() * levelSpread + playerLevel;
// cannot be more than 2x the level and must be higher than 1
found = Math.max(Math.min(2 * playerLevel, found), 1);
return (int) found;
}
}

View File

@ -1,148 +1,168 @@
package net.Indyuce.mmoitems.manager;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.function.Predicate;
import java.util.Random;
import java.util.Set;
import java.util.logging.Level;
import org.bukkit.configuration.ConfigurationSection;
import org.apache.commons.lang.Validate;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
import net.Indyuce.mmoitems.api.item.template.TemplateModifier;
import net.Indyuce.mmoitems.api.player.PlayerData;
public class ItemManager extends BukkitRunnable {
private final Map<Type, CachedItems> cache = new HashMap<>();
public class ItemManager {
public ItemManager() {
runTaskTimerAsynchronously(MMOItems.plugin, 60 * 20, 2 * 60 * 20);
/*
* registered mmoitem templates
*/
private final Map<Type, Map<String, MMOItemTemplate>> templates = new HashMap<>();
/*
* bank of item modifiers which can be used anywhere in generation templates
* to make item generation easier.
*/
private final Map<String, TemplateModifier> modifiers = new HashMap<>();
private static final Random random = new Random();
public MMOItemTemplate getTemplate(Type type, String id) {
Validate.isTrue(templates.containsKey(type), "No template is registered with type " + type.getId() + "");
Map<String, MMOItemTemplate> templates = this.templates.get(type);
id = id.toUpperCase().replace("-", "_").replace(" ", "_");
Validate.isTrue(templates.containsKey(id), "No template was found with ID '" + id + "'");
return templates.get(id);
}
public MMOItem generateMMOItem(Type type, String id, PlayerData player) {
return getTemplate(type, id).newBuilder(player.getRPG()).build();
}
@Deprecated
public MMOItem getMMOItem(Type type, String id) {
id = id.toUpperCase().replace("-", "_").replace(" ", "_");
LoadedItem cached = getCachedMMOItem(type, id);
if (cached != null) {
cached.refresh();
return cached.getItem();
}
FileConfiguration typeConfig = type.getConfigFile().getConfig();
if (!typeConfig.contains(id))
return null;
MMOItem mmoitem = new MMOItem(type, id);
ConfigurationSection section = typeConfig.getConfigurationSection(id);
for (ItemStat stat : type.getAvailableStats())
if (section.contains(stat.getPath()))
try {
mmoitem.setData(stat, stat.whenInitialized(section.get(stat.getPath())));
} catch (IllegalArgumentException exception) {
MMOItems.plugin.getLogger().log(Level.WARNING,
"Error while loading " + type.getId() + "." + id + " (" + stat.getName() + "): " + exception.getMessage());
}
cache(mmoitem);
return mmoitem;
return getTemplate(type, id).newBuilder(0, rollTier()).build();
}
@Deprecated
public ItemStack getItem(Type type, String id) {
MMOItem item = getMMOItem(type, id);
return item == null ? null : item.newBuilder().build();
return getMMOItem(type, id).newBuilder().build();
}
public LoadedItem getCachedMMOItem(Type type, String id) {
CachedItems cached;
return this.cache.containsKey(type) ? (cached = cache.get(type)).isCached(id) ? cached.getCached(id) : null : null;
}
/*
* warning, this method checks the entire config file and should only be
* used when the plugin is loading.
/**
* Registers an MMOItem template internally. Can be done at any time
*
* @param template
* Template to register
*/
public void registerTemplate(MMOItemTemplate template) {
Validate.notNull(template, "MMOItem template cannot be null");
if (!templates.containsKey(template.getType()))
templates.put(template.getType(), new HashMap<>());
templates.get(template.getType()).put(template.getId(), template);
}
@Deprecated
public boolean hasMMOItem(Type type, String id) {
return hasTemplate(type, id);
}
public boolean hasTemplate(Type type, String id) {
id = id.toUpperCase().replace("-", "_").replace(" ", "_");
// check cache
if (cache.containsKey(type) && cache.get(type).isCached(id))
return true;
// check type config file
return type.getConfigFile().getConfig().contains(id);
return templates.containsKey(type) && templates.get(type).containsKey(id);
}
public void uncache(Type type, String id) {
if (cache.containsKey(type))
cache.get(type).emptyCache(id);
public Collection<TemplateModifier> getModifiers() {
return modifiers.values();
}
private void cache(MMOItem item) {
if (!cache.containsKey(item.getType()))
cache.put(item.getType(), new CachedItems());
cache.get(item.getType()).cache(item.getId(), item);
public boolean hasModifier(String id) {
return modifiers.containsKey(id);
}
public TemplateModifier getModifier(String id) {
return modifiers.get(id);
}
public ItemTier rollTier() {
double s = 0;
for (ItemTier tier : MMOItems.plugin.getTiers().getAll()) {
if (random.nextDouble() < tier.getGenerationChance() / (1 - s))
return tier;
s += tier.getGenerationChance();
}
// default tier
return null;
}
/*
* every two minutes, loops through any loaded item and uncaches any if they
* have not been generated for more than 5 minutes.
* formula to generate the item level. input is the player level and the
* level spread which corresponds to the standard deviation of a gaussian
* distribution centered on the player level
*/
@Override
public void run() {
cache.values().forEach(cached -> cached.removeIf(loaded -> loaded.isTimedOut()));
public int rollLevel(int playerLevel) {
double found = random.nextGaussian() * MMOItems.plugin.getLanguage().levelSpread + playerLevel;
// cannot be more than 2x the level and must be higher than 1
found = Math.max(Math.min(2 * playerLevel, found), 1);
return (int) found;
}
public class CachedItems {
private final Map<String, LoadedItem> cache = new HashMap<>();
public LoadedItem getCached(String id) {
return cache.get(id);
}
public boolean isCached(String id) {
return cache.containsKey(id);
}
public void emptyCache(String id) {
cache.remove(id);
}
public void cache(String id, MMOItem item) {
cache.put(id, new LoadedItem(item));
}
public void removeIf(Predicate<LoadedItem> filter) {
cache.values().removeIf(filter);
}
}
public class LoadedItem {
private final MMOItem item;
private long loaded = System.currentTimeMillis();
public LoadedItem(MMOItem item) {
this.item = item;
}
public void refresh() {
loaded = System.currentTimeMillis();
}
public MMOItem getItem() {
return item;
}
public boolean isTimedOut() {
return loaded + 5 * 60 * 1000 < System.currentTimeMillis();
}
/**
* @return Collects all existing mmoitem templates into a set so that it can
* be filtered afterwards to generate random loot
*/
public Set<MMOItemTemplate> collectTemplates() {
Set<MMOItemTemplate> templates = new HashSet<>();
this.templates.values().forEach(map -> templates.addAll(map.values()));
return templates;
}
public void reload() {
cache.clear();
templates.clear();
modifiers.clear();
MMOItems.plugin.getLogger().log(Level.INFO, "Loading template modifiers, please wait..");
for (File file : new File(MMOItems.plugin.getDataFolder() + "/generator/modifiers").listFiles()) {
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
for (String key : config.getKeys(false))
try {
TemplateModifier modifier = new TemplateModifier(config.getConfigurationSection(key));
modifiers.put(modifier.getId(), modifier);
} catch (IllegalArgumentException exception) {
MMOItems.plugin.getLogger().log(Level.INFO,
"An error occured while trying to load item gen modifier '" + key + "': " + exception.getMessage());
}
}
MMOItems.plugin.getLogger().log(Level.INFO, "Loading item templates, please wait..");
for (Type type : MMOItems.plugin.getTypes().getAll()) {
FileConfiguration config = type.getConfigFile().getConfig();
for (String key : config.getKeys(false))
try {
registerTemplate(new MMOItemTemplate(config.getConfigurationSection(key)));
} catch (IllegalArgumentException exception) {
MMOItems.plugin.getLogger().log(Level.INFO,
"An error occured while trying to load item gen template '" + key + "': " + exception.getMessage());
}
}
}
}

View File

@ -1,15 +1,22 @@
package net.Indyuce.mmoitems.manager.recipe;
package net.Indyuce.mmoitems.manager;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.stream.Collectors;
import org.bukkit.Bukkit;
import org.bukkit.Keyed;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.BlastingRecipe;
import org.bukkit.inventory.CampfireRecipe;
import org.bukkit.inventory.FurnaceRecipe;
import org.bukkit.inventory.Recipe;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmokingRecipe;
@ -18,12 +25,14 @@ import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.recipe.MMORecipeChoice;
import net.Indyuce.mmoitems.api.recipe.workbench.CustomRecipe;
public class RecipeManagerDefault extends RecipeManager {
public RecipeManagerDefault() {
public class RecipeManager {
private final Set<CustomRecipe> craftingRecipes = new HashSet<>();
private final Set<LoadedRecipe> loadedRecipes = new HashSet<>();
public RecipeManager() {
reload();
}
@Override
public void reload() {
clearCustomRecipes();
@ -64,7 +73,6 @@ public class RecipeManagerDefault extends RecipeManager {
getLoadedRecipes().forEach(recipe -> Bukkit.addRecipe(recipe.getRecipe())));
}
@Override
public void registerFurnaceRecipe(Type type, String id, BurningRecipeInformation info, String number) {
if (!info.getChoice().isValid()) {
MMOItems.plugin.getLogger().warning("Couldn't load furnace recipe for '" + type.getId() + "." + id + "'");
@ -109,12 +117,10 @@ public class RecipeManagerDefault extends RecipeManager {
registerRecipe(key, recipe);
}
@Override
public void registerShapedRecipe(Type type, String id, List<String> list) {
registerRecipe(new CustomRecipe(MMOItems.plugin.getItems().getMMOItem(type, id).newBuilder().buildNBT(), list, false));
}
@Override
public void registerShapelessRecipe(Type type, String id, List<String> list) {
registerRecipe(new CustomRecipe(MMOItems.plugin.getItems().getMMOItem(type, id).newBuilder().buildNBT(), list, true));
}
@ -129,4 +135,104 @@ public class RecipeManagerDefault extends RecipeManager {
public RecipeChoice toBukkit(MMORecipeChoice choice) {
return choice.isVanilla() ? new RecipeChoice.MaterialChoice(choice.getItem().getType()) : new RecipeChoice.ExactChoice(choice.getItem());
}
public void registerRecipe(NamespacedKey key, Recipe recipe) {
loadedRecipes.add(new LoadedRecipe(key, recipe));
}
public void registerRecipe(CustomRecipe recipe) {
if (!recipe.isEmpty())
craftingRecipes.add(recipe);
}
public Set<LoadedRecipe> getLoadedRecipes() {
return loadedRecipes;
}
public Set<CustomRecipe> getCustomRecipes() {
return craftingRecipes;
}
public Set<NamespacedKey> getNamespacedKeys() {
return loadedRecipes.stream().map(recipe -> recipe.getKey()).collect(Collectors.toSet());
}
public void sortRecipes() {
List<CustomRecipe> temporary = new ArrayList<>();
temporary.addAll(craftingRecipes);
craftingRecipes.clear();
craftingRecipes.addAll(temporary.stream().sorted().collect(Collectors.toList()));
}
public void clearCustomRecipes() {
craftingRecipes.clear();
}
public NamespacedKey getRecipeKey(Type type, String id, String recipeType, String number) {
return new NamespacedKey(MMOItems.plugin, recipeType + "_" + type.getId() + "_" + id + "_" + number);
}
public void reloadRecipes() {
Bukkit.getScheduler().runTask(MMOItems.plugin, () -> {
Iterator<Recipe> iterator = Bukkit.recipeIterator();
while (iterator.hasNext()) {
Recipe recipe = iterator.next();
if (recipe instanceof Keyed && ((Keyed) recipe).getKey().getNamespace().equals("mmoitems"))
iterator.remove();
}
loadedRecipes.clear();
reload();
});
}
/*
* used because spigot API does not let us access namespaced key of a Recipe
* instance.
*/
public class LoadedRecipe {
private final Recipe recipe;
private final NamespacedKey key;
public LoadedRecipe(NamespacedKey key, Recipe recipe) {
this.recipe = recipe;
this.key = key;
}
public NamespacedKey getKey() {
return key;
}
public Recipe getRecipe() {
return recipe;
}
}
/*
* blast furnace, smoker, campfire and furnace recipes have extra parameters
*/
public class BurningRecipeInformation {
private final MMORecipeChoice choice;
private final float exp;
private final int burnTime;
protected BurningRecipeInformation(ConfigurationSection config) {
choice = new MMORecipeChoice(config.getString("item"));
exp = (float) config.getDouble("exp", 0.35);
burnTime = config.getInt("time", 200);
}
public int getBurnTime() {
return burnTime;
}
public MMORecipeChoice getChoice() {
return choice;
}
public float getExp() {
return exp;
}
}
}

View File

@ -10,7 +10,7 @@ import org.apache.commons.lang.Validate;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.stat.type.ItemStat;
public class TierManager {

View File

@ -24,8 +24,8 @@ import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.UpdaterData;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.VolatileMMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.VolatileMMOItem;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.item.NBTItem;

View File

@ -1,130 +0,0 @@
package net.Indyuce.mmoitems.manager.recipe;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.bukkit.Bukkit;
import org.bukkit.Keyed;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.Recipe;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.recipe.MMORecipeChoice;
import net.Indyuce.mmoitems.api.recipe.workbench.CustomRecipe;
public abstract class RecipeManager {
private final Set<CustomRecipe> craftingRecipes = new HashSet<>();
private final Set<LoadedRecipe> loadedRecipes = new HashSet<>();
public abstract void reload();
public abstract void registerFurnaceRecipe(Type type, String id, BurningRecipeInformation info, String number);
public abstract void registerShapedRecipe(Type type, String id, List<String> list);
public abstract void registerShapelessRecipe(Type type, String id, List<String> ingredients);
public void registerRecipe(NamespacedKey key, Recipe recipe) {
loadedRecipes.add(new LoadedRecipe(key, recipe));
}
public void registerRecipe(CustomRecipe recipe) {
if(!recipe.isEmpty())
craftingRecipes.add(recipe);
}
public Set<LoadedRecipe> getLoadedRecipes() {
return loadedRecipes;
}
public Set<CustomRecipe> getCustomRecipes() {
return craftingRecipes;
}
public Set<NamespacedKey> getNamespacedKeys() {
return loadedRecipes.stream().map(recipe -> recipe.getKey()).collect(Collectors.toSet());
}
public void sortRecipes() {
List<CustomRecipe> temporary = new ArrayList<>();
temporary.addAll(craftingRecipes);
craftingRecipes.clear();
craftingRecipes.addAll(temporary.stream().sorted().collect(Collectors.toList()));
}
public void clearCustomRecipes() {
craftingRecipes.clear();
}
public NamespacedKey getRecipeKey(Type type, String id, String recipeType, String number) {
return new NamespacedKey(MMOItems.plugin, recipeType + "_" + type.getId() + "_" + id + "_" + number);
}
public void reloadRecipes() {
Bukkit.getScheduler().runTask(MMOItems.plugin, () -> {
Iterator<Recipe> iterator = Bukkit.recipeIterator();
while (iterator.hasNext()) {
Recipe recipe = iterator.next();
if (recipe instanceof Keyed && ((Keyed) recipe).getKey().getNamespace().equals("mmoitems"))
iterator.remove();
}
loadedRecipes.clear();
reload();
});
}
/*
* used because spigot API does not let us access namespaced key of a Recipe
* instance.
*/
public class LoadedRecipe {
private final Recipe recipe;
private final NamespacedKey key;
public LoadedRecipe(NamespacedKey key, Recipe recipe) {
this.recipe = recipe;
this.key = key;
}
public NamespacedKey getKey() {
return key;
}
public Recipe getRecipe() {
return recipe;
}
}
/*
* blast furnace, smoker, campfire and furnace recipes have extra parameters
*/
public class BurningRecipeInformation {
private final MMORecipeChoice choice;
private final float exp;
private final int burnTime;
protected BurningRecipeInformation(ConfigurationSection config) {
choice = new MMORecipeChoice(config.getString("item"));
exp = (float) config.getDouble("exp", 0.35);
burnTime = config.getInt("time", 200);
}
public int getBurnTime() {
return burnTime;
}
public MMORecipeChoice getChoice() {
return choice;
}
public float getExp() {
return exp;
}
}
}

View File

@ -1,77 +0,0 @@
package net.Indyuce.mmoitems.manager.recipe;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.FurnaceRecipe;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.recipe.workbench.CustomRecipe;
/** One day we'll get rid of 1.12 for real >:) */
public class RecipeManagerLegacy extends RecipeManager {
public RecipeManagerLegacy() {
reload();
}
@Override
public void reload() {
clearCustomRecipes();
for (Type type : MMOItems.plugin.getTypes().getAll()) {
FileConfiguration config = type.getConfigFile().getConfig();
for (String id : config.getKeys(false))
try {
if (config.getConfigurationSection(id).contains("crafting")) {
ConfigurationSection section = config.getConfigurationSection(id + ".crafting");
if (section.contains("shaped"))
section.getConfigurationSection("shaped").getKeys(false)
.forEach(recipe -> registerShapedRecipe(type, id, section.getStringList("shaped." + recipe)));
if (section.contains("shapeless"))
section.getConfigurationSection("shapeless").getKeys(false)
.forEach(recipe -> registerShapelessRecipe(type, id, section.getStringList("shapeless." + recipe)));
if (section.contains("furnace"))
section.getConfigurationSection("furnace").getKeys(false)
.forEach(recipe -> registerFurnaceRecipe(type, id,
new BurningRecipeInformation(section.getConfigurationSection("furnace." + recipe)), recipe));
}
} catch (IllegalArgumentException exception) {
MMOItems.plugin.getLogger().log(Level.WARNING,
"Could not load recipe of " + id + ": " + exception.getMessage());
}
}
sortRecipes();
Bukkit.getScheduler().runTask(MMOItems.plugin,
() -> getLoadedRecipes().forEach(recipe -> Bukkit.addRecipe(recipe.getRecipe())));
}
@Override
public void registerFurnaceRecipe(Type type, String id, BurningRecipeInformation info, String number) {
if (!info.getChoice().isValid()) {
MMOItems.plugin.getLogger().warning("Couldn't load furnace recipe for '" + type.getId() + "." + id + "'");
return;
}
NamespacedKey key = getRecipeKey(type, id, "furnace", number);
FurnaceRecipe recipe = new FurnaceRecipe(key, MMOItems.plugin.getItems().getItem(type, id),
info.getChoice().getItem().getType(), info.getExp(), info.getBurnTime());
registerRecipe(key, recipe);
}
@Override
public void registerShapedRecipe(Type type, String id, List<String> list) {
registerRecipe(new CustomRecipe(MMOItems.plugin.getItems().getMMOItem(type, id).newBuilder().buildNBT(), list, false));
}
@Override
public void registerShapelessRecipe(Type type, String id, List<String> list) {
registerRecipe(new CustomRecipe(MMOItems.plugin.getItems().getMMOItem(type, id).newBuilder().buildNBT(), list, true));
}
}

View File

@ -8,16 +8,16 @@ import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.ability.Ability;
import net.Indyuce.mmoitems.api.ability.Ability.CastingMode;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.AbilityListEdition;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.stat.data.AbilityData;
import net.Indyuce.mmoitems.stat.data.AbilityListData;
import net.Indyuce.mmoitems.stat.data.random.RandomAbilityData;
import net.Indyuce.mmoitems.stat.data.random.RandomAbilityListData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.item.ItemTag;
@ -68,7 +68,7 @@ public class Abilities extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
List<String> abilityLore = new ArrayList<>();
boolean splitter = !MMOItems.plugin.getLanguage().abilitySplitter.equals("");

View File

@ -3,7 +3,7 @@ package net.Indyuce.mmoitems.stat;
import org.bukkit.attribute.Attribute;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.util.StatFormat;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
@ -17,7 +17,7 @@ public class Armor extends AttributeStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
double value = ((DoubleData) data).generateNewValue();
// for (String slot : item.getMMOItem().getType().getSlots())
// item.addItemAttribute(new Attribute("armor", value, slot));

View File

@ -4,7 +4,7 @@ import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.util.StatFormat;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
@ -17,7 +17,7 @@ public class ArmorToughness extends AttributeStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
double value = ((DoubleData) data).generateNewValue();
item.addItemTag(new ItemTag("MMOITEMS_ARMOR_TOUGHNESS", value));
item.getLore().insert("armor-toughness", formatNumericStat(value, "#", new StatFormat("##").format(value)));

View File

@ -15,14 +15,14 @@ import com.google.gson.JsonSyntaxException;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.ArrowParticlesEdition;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.stat.data.ArrowParticlesData;
import net.Indyuce.mmoitems.stat.data.ParticleData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.item.ItemTag;
@ -58,7 +58,7 @@ public class ArrowParticles extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
item.addItemTag(new ItemTag("MMOITEMS_ARROW_PARTICLES", data.toString()));
}

View File

@ -4,7 +4,7 @@ import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.util.StatFormat;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
@ -17,7 +17,7 @@ public class AttackDamage extends AttributeStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
double value = ((DoubleData) data).generateNewValue();
item.addItemTag(new ItemTag("MMOITEMS_ATTACK_DAMAGE", value));
item.getLore().insert("attack-damage", formatNumericStat(value, "#", new StatFormat("##").format(value)));

View File

@ -2,7 +2,7 @@ package net.Indyuce.mmoitems.stat;
import org.bukkit.attribute.Attribute;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.util.StatFormat;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
@ -17,7 +17,7 @@ public class AttackSpeed extends AttributeStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
double value = ((DoubleData) data).generateNewValue();
item.addItemTag(new ItemTag("MMOITEMS_ATTACK_SPEED", value));
item.getLore().insert("attack-speed", formatNumericStat(value, "#", new StatFormat("##").format(value)));

View File

@ -6,14 +6,14 @@ import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.CommandListEdition;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.stat.data.CommandData;
import net.Indyuce.mmoitems.stat.data.CommandListData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.item.ItemTag;
@ -131,7 +131,7 @@ public class Commands extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
JsonArray array = new JsonArray();
List<String> lore = new ArrayList<>();

View File

@ -15,12 +15,12 @@ import com.google.gson.JsonParser;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.stat.data.StringListData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.item.ItemTag;
@ -97,7 +97,7 @@ public class CompatibleTypes extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
List<String> compatibleTypes = new ArrayList<>();
JsonArray array = new JsonArray();
((StringListData) data).getList().forEach(line -> {

View File

@ -13,12 +13,12 @@ import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.CraftingEdition;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.util.AltChar;
@ -121,7 +121,7 @@ public class Crafting extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
}
@Override

View File

@ -2,8 +2,8 @@ package net.Indyuce.mmoitems.stat;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.StringStat;
import net.mmogroup.mmolib.version.VersionMaterial;
@ -25,6 +25,6 @@ public class CraftingPermission extends StringStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
}
}

View File

@ -1,7 +1,7 @@
package net.Indyuce.mmoitems.stat;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.DoubleStat;
@ -20,7 +20,7 @@ public class CustomModelData extends DoubleStat implements ProperStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
item.addItemTag(new ItemTag("CustomModelData", (int) ((DoubleData) data).generateNewValue()));
}

View File

@ -14,14 +14,14 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.CustomSound;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.gui.edition.SoundsEdition;
import net.Indyuce.mmoitems.stat.data.SoundData;
import net.Indyuce.mmoitems.stat.data.SoundListData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.Indyuce.mmoitems.stat.type.ProperStat;
@ -135,7 +135,7 @@ public class CustomSounds extends ItemStat implements ProperStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
SoundListData sounds = (SoundListData) data;
sounds.getCustomSounds().forEach(sound -> {

View File

@ -1,7 +1,7 @@
package net.Indyuce.mmoitems.stat;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.DoubleStat;
@ -17,7 +17,7 @@ public class DefaultDurability extends DoubleStat implements ProperStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
if (item.getMeta() instanceof Damageable)
((Damageable) item.getMeta()).setDamage((int) ((DoubleData) data).generateNewValue());
}

View File

@ -4,9 +4,9 @@ import org.bukkit.ChatColor;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.stat.data.StringData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
@ -20,7 +20,7 @@ public class DisplayName extends StringStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
item.getMeta().setDisplayName(fix(MMOLib.plugin.parseColors(getDisplayName(data))));
}

View File

@ -12,12 +12,12 @@ import org.bukkit.inventory.meta.LeatherArmorMeta;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.stat.data.ColorData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.util.AltChar;
@ -95,7 +95,7 @@ public class DyeColor extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
if (item.getMeta() instanceof LeatherArmorMeta)
((LeatherArmorMeta) item.getMeta()).setColor(((ColorData) data).getColor());
}

View File

@ -24,14 +24,14 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.stat.data.PotionEffectData;
import net.Indyuce.mmoitems.stat.data.PotionEffectListData;
import net.Indyuce.mmoitems.stat.data.random.RandomPotionEffectListData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.item.ItemTag;
@ -162,7 +162,7 @@ public class Effects extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
List<String> lore = new ArrayList<>();
JsonArray array = new JsonArray();

View File

@ -14,15 +14,15 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.Element;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.api.util.StatFormat;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.gui.edition.ElementsEdition;
import net.Indyuce.mmoitems.stat.data.ElementListData;
import net.Indyuce.mmoitems.stat.data.random.RandomElementListData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.item.ItemTag;
@ -121,7 +121,7 @@ public class Elements extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
ElementListData elements = (ElementListData) data;
for (Element element : elements.getDamageElements()) {

View File

@ -18,13 +18,13 @@ import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.stat.data.EnchantListData;
import net.Indyuce.mmoitems.stat.data.random.RandomEnchantListData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.MMOLib;
@ -148,7 +148,7 @@ public class Enchants extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
EnchantListData enchants = (EnchantListData) data;
for (Enchantment enchant : enchants.getEnchants())
item.getMeta().addEnchant(enchant, enchants.getLevel(enchant), true);

View File

@ -1,6 +1,6 @@
package net.Indyuce.mmoitems.stat;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.StringStat;
import net.mmogroup.mmolib.api.item.ItemTag;
@ -12,7 +12,7 @@ public class GemColor extends StringStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
item.addItemTag(new ItemTag(getNBTPath(), data.toString()));
}
}

View File

@ -18,13 +18,13 @@ import com.google.gson.JsonSyntaxException;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.edition.StatEdition;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.stat.data.GemSocketsData;
import net.Indyuce.mmoitems.stat.data.GemstoneData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.item.ItemTag;
@ -49,7 +49,7 @@ public class GemSockets extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
GemSocketsData sockets = (GemSocketsData) data;
item.addItemTag(new ItemTag("MMOITEMS_GEM_STONES", sockets.toJson().toString()));

View File

@ -4,8 +4,8 @@ import org.bukkit.Material;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.stat.data.BooleanData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.BooleanStat;
@ -17,7 +17,7 @@ public class HideEnchants extends BooleanStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
if (((BooleanData) data).isEnabled())
item.getMeta().addItemFlags(ItemFlag.HIDE_ENCHANTS);
}

View File

@ -4,8 +4,8 @@ import org.bukkit.Material;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.stat.data.BooleanData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.BooleanStat;
@ -17,7 +17,7 @@ public class HidePotionEffects extends BooleanStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
if (((BooleanData) data).isEnabled())
item.getMeta().addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
}

View File

@ -3,7 +3,7 @@ package net.Indyuce.mmoitems.stat;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.stat.data.BooleanData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.BooleanStat;
@ -15,7 +15,7 @@ public class Inedible extends BooleanStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
if (((BooleanData) data).isEnabled())
item.addItemTag(new ItemTag("MMOITEMS_INEDIBLE", true));
}

View File

@ -5,14 +5,14 @@ import com.google.gson.JsonSyntaxException;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.ConfigFile;
import net.Indyuce.mmoitems.api.item.MMOItem;
import net.Indyuce.mmoitems.api.item.ReadMMOItem;
import net.Indyuce.mmoitems.api.item.build.MMOItemBuilder;
import net.Indyuce.mmoitems.api.itemgen.RandomStatData;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.gui.edition.EditionInventory;
import net.Indyuce.mmoitems.gui.edition.ParticlesEdition;
import net.Indyuce.mmoitems.particle.api.ParticleType;
import net.Indyuce.mmoitems.stat.data.ParticleData;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.ItemStat;
import net.mmogroup.mmolib.api.item.ItemTag;
@ -50,7 +50,7 @@ public class ItemParticles extends ItemStat {
}
@Override
public void whenApplied(MMOItemBuilder item, StatData data) {
public void whenApplied(ItemStackBuilder item, StatData data) {
item.addItemTag(new ItemTag("MMOITEMS_ITEM_PARTICLES", ((ParticleData) data).toJson().toString()));
}

Some files were not shown because too many files have changed in this diff Show More