diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/ConfigMMOItem.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/ConfigMMOItem.java index ff5c2a26..3b953235 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/ConfigMMOItem.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/ConfigMMOItem.java @@ -25,6 +25,7 @@ public class ConfigMMOItem { Validate.isTrue(config.contains("type") && config.contains("id"), "Config must contain type and ID"); Type type = MMOItems.plugin.getTypes().getOrThrow(config.getString("type").toUpperCase().replace("-", "_").replace(" ", "_")); template = MMOItems.plugin.getTemplates().getTemplateOrThrow(type, config.getString("id")); + preview = template.newBuilder(0,null,true).build().newBuilder().build(); this.amount = Math.max(1, config.getInt("amount")); } @@ -44,7 +45,7 @@ public class ConfigMMOItem { * @return A freshly-crafted item to be used by the player. */ @NotNull public ItemStack generate(@NotNull RPGPlayer player) { - ItemStack item = template.newBuilder(player).build().newBuilder().build(); + ItemStack item = template.newBuilder(player,false).build().newBuilder().build(); item.setAmount(amount); return item; } @@ -57,8 +58,8 @@ public class ConfigMMOItem { * reduce startup calculations so that item is calculated the first time it * needs to be displayed */ - public ItemStack getPreview(boolean hideModifiers) { - return preview == null ? (preview = template.newBuilder(0, null).build(hideModifiers).newBuilder().build(true)).clone() : preview.clone(); + public ItemStack getPreview(boolean noModifiers) { + return preview == null ? (preview = template.newBuilder(0, null,noModifiers).build().newBuilder().build(true)).clone() : preview.clone(); } public ItemStack getPreview(){ diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/recipe/CraftingRecipe.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/recipe/CraftingRecipe.java index 67cefdf4..f3c230f1 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/recipe/CraftingRecipe.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/recipe/CraftingRecipe.java @@ -164,7 +164,7 @@ public class CraftingRecipe extends Recipe { * backwards compatibility, since this is how it used to * be done. Don't want to break that without good reason. */ - return identifiedMMO.getPreview(hasOption(RecipeOption.HIDE_MODIFIERS)); + return identifiedMMO.getPreview(true); } // Generate from ProvidedUIFilter, guaranteed to not be null don't listen to the inspection. diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/recipe/Recipe.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/recipe/Recipe.java index 42026091..8a6921b6 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/recipe/Recipe.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/crafting/recipe/Recipe.java @@ -189,7 +189,6 @@ public abstract class Recipe { } public static enum RecipeOption { - HIDE_MODIFIERS(true), /** * Hide the crafting recipe when one of the condition is not met diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/build/MMOItemBuilder.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/build/MMOItemBuilder.java index 012bcfc3..524e0459 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/build/MMOItemBuilder.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/build/MMOItemBuilder.java @@ -32,6 +32,9 @@ public class MMOItemBuilder { */ private final HashMap nameModifiers = new HashMap<>(); + public MMOItemBuilder(MMOItemTemplate template, int level, @Nullable ItemTier tier){ + this(template,level,tier,false); + } /** * Instance which is created everytime an mmoitem is being randomly * generated @@ -41,8 +44,9 @@ public class MMOItemBuilder { * @param tier Specified item tier which determines how many capacity it will * have. If no tier is given, item uses the default capacity * formula given in the main config file + * @param noModifiers hides modifiers from previewed items! */ - public MMOItemBuilder(MMOItemTemplate template, int level, @Nullable ItemTier tier) { + public MMOItemBuilder(MMOItemTemplate template, int level, @Nullable ItemTier tier, boolean noModifiers) { this.level = level; this.tier = tier; @@ -62,6 +66,9 @@ public class MMOItemBuilder { if (level > 0) mmoitem.setData(ItemStats.ITEM_LEVEL, new DoubleData(level)); + if (noModifiers){ + return; + } // Roll item generation modifiers for (TemplateModifier modifier : rollModifiers(template)) { // Roll modifier chance; only apply if the rolled item has enough capacity @@ -96,11 +103,9 @@ public class MMOItemBuilder { * * @return Built MMOItem instance */ - public MMOItem build(boolean hideModifierNames) { + public MMOItem build() { + - if (hideModifierNames){ - return mmoitem; - } if (!nameModifiers.isEmpty()) { // Get name data @@ -133,9 +138,6 @@ public class MMOItemBuilder { return mmoitem; } - public MMOItem build(){ - return build(false); - } /** * Applies statData to the builder, either merges it if statData is diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/template/MMOItemTemplate.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/template/MMOItemTemplate.java index c9992d7a..cb09cac8 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/template/MMOItemTemplate.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/template/MMOItemTemplate.java @@ -15,6 +15,7 @@ import net.Indyuce.mmoitems.stat.data.random.RandomStatData; import net.Indyuce.mmoitems.stat.type.ItemStat; import org.apache.commons.lang.Validate; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -144,17 +145,23 @@ public class MMOItemTemplate extends PostLoadObject implements ItemReference { return options.contains(option); } - public MMOItemBuilder newBuilder(@Nullable Player player) { - if (player != null) { return newBuilder(PlayerData.get(player).getRPG()); } - return newBuilder((RPGPlayer) null); + public MMOItemBuilder newBuilder(@Nullable Player player, boolean noModifiers) { + if (player != null) { return newBuilder(PlayerData.get(player).getRPG(),noModifiers); } + return newBuilder((RPGPlayer) null,noModifiers); + } + public MMOItemBuilder newBuilder(@Nullable Player player) { return this.newBuilder(player,false); } + + public MMOItemBuilder newBuilder(boolean noModifiers) { return newBuilder((RPGPlayer) null,noModifiers); } + public MMOItemBuilder newBuilder() { return this.newBuilder(false); } + + public MMOItemBuilder newBuilder(@Nullable PlayerData player, boolean noModifiers) { + if (player != null) { return newBuilder(player.getRPG(),noModifiers); } + return newBuilder((RPGPlayer) null,noModifiers); + } + public MMOItemBuilder newBuilder(@Nullable PlayerData player){ + return this.newBuilder(player,false); } - public MMOItemBuilder newBuilder() { return newBuilder((RPGPlayer) null); } - - public MMOItemBuilder newBuilder(@Nullable PlayerData player) { - if (player != null) { return newBuilder(player.getRPG()); } - return newBuilder((RPGPlayer) null); - } /** * By default, item templates have item level 0 and no random tier. If the @@ -166,24 +173,38 @@ public class MMOItemTemplate extends PostLoadObject implements ItemReference { * * @return Item builder with random level and tier? */ - public MMOItemBuilder newBuilder(@Nullable RPGPlayer player) { + public MMOItemBuilder newBuilder(@Nullable RPGPlayer player, boolean noModifiers) { // No player ~ default settings - if (player == null) { return newBuilder(0, null); } + if (player == null) { return newBuilder(0, null,noModifiers); } // Read from player int itemLevel = hasOption(TemplateOption.LEVEL_ITEM) ? MMOItems.plugin.getTemplates().rollLevel(player.getLevel()) : 0; ItemTier itemTier = hasOption(TemplateOption.TIERED) ? MMOItems.plugin.getTemplates().rollTier() : null; - return new MMOItemBuilder(this, itemLevel, itemTier); + return new MMOItemBuilder(this, itemLevel, itemTier,noModifiers); + } + public MMOItemBuilder newBuilder(@Nullable RPGPlayer player){ + return this.newBuilder(player,false); } + + + /** + * @param itemLevel The desired item level + * @param itemTier The desired item tier, can be null + * @param noModifiers Whether to add modifiers to the item + * @return Item builder with specific item level and tier + */ + public MMOItemBuilder newBuilder(int itemLevel, @Nullable ItemTier itemTier,boolean noModifiers) { + return new MMOItemBuilder(this, itemLevel, itemTier); + } /** * @param itemLevel The desired item level * @param itemTier The desired item tier, can be null * @return Item builder with specific item level and tier */ - public MMOItemBuilder newBuilder(int itemLevel, @Nullable ItemTier itemTier) { - return new MMOItemBuilder(this, itemLevel, itemTier); + public MMOItemBuilder newBuilder(int itemLevel,@Nullable ItemTier itemTier){ + return this.newBuilder(itemLevel,itemTier,false); } public enum TemplateOption { diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/template/explorer/TemplateExplorer.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/template/explorer/TemplateExplorer.java index b556633c..a7d18e4f 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/template/explorer/TemplateExplorer.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/template/explorer/TemplateExplorer.java @@ -55,8 +55,11 @@ public class TemplateExplorer { * @return Random item with random tier and item level which matches the * player's level */ - public Optional rollItem(RPGPlayer player) { - return rollLoot().map(template -> template.newBuilder(player).build()); + public Optional rollItem(RPGPlayer player, boolean noModifiers) { + return rollLoot().map(template -> template.newBuilder(player,noModifiers).build()); + } + public Optional rollItem(RPGPlayer player){ + return this.rollItem(player,false); } private Predicate not(Predicate predicate) { diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/gui/ItemBrowser.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/gui/ItemBrowser.java index 145e1fe6..a12a1d93 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/gui/ItemBrowser.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/gui/ItemBrowser.java @@ -235,8 +235,8 @@ public class ItemBrowser extends PluginInventory { continue; } - // Build item -> any errors? - ItemStack item = template.newBuilder(playerData.getRPG()).build().newBuilder().build(); + // Build item -> any errors? [As of now, needs a configuration option for modifiers] + ItemStack item = template.newBuilder(playerData.getRPG(),true).build().newBuilder().build(); if (item == null || item.getType().isAir() || !item.getType().isItem() || item.getItemMeta() == null) { // Set Item