mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-02-08 12:21:21 +01:00
Better definitions for MMOItem class
This commit is contained in:
parent
df6e916d4a
commit
4706dd0ac0
@ -5,7 +5,6 @@ import io.lumine.mythic.lib.api.crafting.ingredients.*;
|
|||||||
import io.lumine.mythic.lib.api.crafting.outputs.MRORecipe;
|
import io.lumine.mythic.lib.api.crafting.outputs.MRORecipe;
|
||||||
import io.lumine.mythic.lib.api.crafting.outputs.MythicRecipeOutput;
|
import io.lumine.mythic.lib.api.crafting.outputs.MythicRecipeOutput;
|
||||||
import io.lumine.mythic.lib.api.crafting.recipes.MythicCachedResult;
|
import io.lumine.mythic.lib.api.crafting.recipes.MythicCachedResult;
|
||||||
import io.lumine.mythic.lib.api.crafting.recipes.MythicCraftingManager;
|
|
||||||
import io.lumine.mythic.lib.api.crafting.recipes.MythicRecipe;
|
import io.lumine.mythic.lib.api.crafting.recipes.MythicRecipe;
|
||||||
import io.lumine.mythic.lib.api.crafting.recipes.vmp.VanillaInventoryMapping;
|
import io.lumine.mythic.lib.api.crafting.recipes.vmp.VanillaInventoryMapping;
|
||||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
import io.lumine.mythic.lib.api.item.NBTItem;
|
||||||
@ -580,8 +579,10 @@ public class CustomSmithingRecipe extends MythicRecipeOutput {
|
|||||||
|
|
||||||
// Extract gemstones
|
// Extract gemstones
|
||||||
ArrayList<MMOItem> compGemstones = new ArrayList<>();
|
ArrayList<MMOItem> compGemstones = new ArrayList<>();
|
||||||
if (item != null) { compGemstones.addAll(item.extractGemstones()); }
|
if (item != null)
|
||||||
if (ingot != null) { compGemstones.addAll(ingot.extractGemstones()); }
|
item.extractGemstones().forEach(pair -> compGemstones.add(pair.getValue()));
|
||||||
|
if (ingot != null)
|
||||||
|
ingot.extractGemstones().forEach(pair -> compGemstones.add(pair.getValue()));
|
||||||
|
|
||||||
// Which stones would not fit
|
// Which stones would not fit
|
||||||
ArrayList<ItemStack> remainingStones = new ArrayList<>();
|
ArrayList<ItemStack> remainingStones = new ArrayList<>();
|
||||||
|
@ -7,7 +7,6 @@ import net.Indyuce.mmoitems.MMOItems;
|
|||||||
import net.Indyuce.mmoitems.api.ItemTier;
|
import net.Indyuce.mmoitems.api.ItemTier;
|
||||||
import net.Indyuce.mmoitems.api.Type;
|
import net.Indyuce.mmoitems.api.Type;
|
||||||
import net.Indyuce.mmoitems.api.UpgradeTemplate;
|
import net.Indyuce.mmoitems.api.UpgradeTemplate;
|
||||||
import net.Indyuce.mmoitems.api.interaction.util.DurabilityItem;
|
|
||||||
import net.Indyuce.mmoitems.api.item.ItemReference;
|
import net.Indyuce.mmoitems.api.item.ItemReference;
|
||||||
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
|
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
|
||||||
import net.Indyuce.mmoitems.api.util.MMOItemReforger;
|
import net.Indyuce.mmoitems.api.util.MMOItemReforger;
|
||||||
@ -17,9 +16,9 @@ import net.Indyuce.mmoitems.stat.data.type.Mergeable;
|
|||||||
import net.Indyuce.mmoitems.stat.data.type.StatData;
|
import net.Indyuce.mmoitems.stat.data.type.StatData;
|
||||||
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
||||||
import net.Indyuce.mmoitems.stat.type.StatHistory;
|
import net.Indyuce.mmoitems.stat.type.StatHistory;
|
||||||
|
import net.Indyuce.mmoitems.util.Pair;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -30,6 +29,14 @@ public class MMOItem implements ItemReference {
|
|||||||
private final Type type;
|
private final Type type;
|
||||||
private final String id;
|
private final String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Where data about all the item stats is stored. When the item is
|
||||||
|
* generated, this map is read and all the stats are applied. The order in
|
||||||
|
* which stats are added is not very important anymore
|
||||||
|
*/
|
||||||
|
@NotNull
|
||||||
|
private final Map<ItemStat, StatData> stats = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor used to generate an ItemStack based on some stat data
|
* Constructor used to generate an ItemStack based on some stat data
|
||||||
*
|
*
|
||||||
@ -45,16 +52,11 @@ public class MMOItem implements ItemReference {
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public Type getType() { return type; }
|
@Override
|
||||||
|
public Type getType() { return type; }
|
||||||
|
|
||||||
@Override public String getId() { return id; }
|
@Override
|
||||||
|
public String getId() { return id; }
|
||||||
/**
|
|
||||||
* Where data about all the item stats is stored. When the item is
|
|
||||||
* generated, this map is read and all the stats are applied. The order in
|
|
||||||
* which stats are added is not very important anymore
|
|
||||||
*/
|
|
||||||
@NotNull private final Map<ItemStat, StatData> stats = new HashMap<>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will merge that data into this item:
|
* Will merge that data into this item:
|
||||||
@ -169,21 +171,23 @@ public class MMOItem implements ItemReference {
|
|||||||
* its original stats, and from which gem stone came each stat, in order to allow
|
* its original stats, and from which gem stone came each stat, in order to allow
|
||||||
* removal of gem stones in the future. This is where that is remembered.
|
* removal of gem stones in the future. This is where that is remembered.
|
||||||
*/
|
*/
|
||||||
@NotNull final Map<String, StatHistory> mergeableStatHistory = new HashMap<>();
|
@NotNull
|
||||||
|
private final Map<ItemStat, StatHistory> mergeableStatHistory = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the history associated to this stat, if there is any
|
* Gets the history associated to this stat, if there is any
|
||||||
* <p></p>
|
* <p></p>
|
||||||
* A stat history is basically the memmory of its original stats, from when it was created, its gem stone stats, those added by which gem, and its upgrade bonuses.
|
* A stat history is basically the memmory of its original stats, from when it was created, its gem stone stats, those added by which gem, and its upgrade bonuses.
|
||||||
*/
|
*/
|
||||||
@Nullable public StatHistory getStatHistory(@NotNull ItemStat stat) {
|
@Nullable
|
||||||
|
public StatHistory getStatHistory(@NotNull ItemStat stat) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* As an assumption for several enchantment recognition operations,
|
* As an assumption for several enchantment recognition operations,
|
||||||
* Enchantment data must never be clear and lack history. This is
|
* Enchantment data must never be clear and lack history. This is
|
||||||
* the basis for when an item is 'old'
|
* the basis for when an item is 'old'
|
||||||
*/
|
*/
|
||||||
if (stat instanceof Enchants) { return mergeableStatHistory.getOrDefault(stat.getNBTPath(), StatHistory.from(this, stat, true)); }
|
if (stat instanceof Enchants) { return mergeableStatHistory.getOrDefault(stat, StatHistory.from(this, stat, true)); }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Normal stat, just fetch.
|
* Normal stat, just fetch.
|
||||||
@ -191,15 +195,15 @@ public class MMOItem implements ItemReference {
|
|||||||
try {
|
try {
|
||||||
|
|
||||||
// Well that REALLY should work
|
// Well that REALLY should work
|
||||||
return mergeableStatHistory.get(stat.getNBTPath());
|
return mergeableStatHistory.get(stat);
|
||||||
|
|
||||||
} catch (ClassCastException ignored) {
|
} catch (ClassCastException ignored) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@NotNull public ArrayList<StatHistory> getStatHistories() {
|
|
||||||
|
|
||||||
// Those
|
@NotNull
|
||||||
|
public ArrayList<StatHistory> getStatHistories() {
|
||||||
return new ArrayList<>(mergeableStatHistory.values());
|
return new ArrayList<>(mergeableStatHistory.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,7 +213,7 @@ public class MMOItem implements ItemReference {
|
|||||||
* A stat history is basically the memmory of its original stats, from when it was created, its gem stone stats, those added by which gem, and its upgrade bonuses.
|
* A stat history is basically the memmory of its original stats, from when it was created, its gem stone stats, those added by which gem, and its upgrade bonuses.
|
||||||
*/
|
*/
|
||||||
public void setStatHistory(@NotNull ItemStat stat, @NotNull StatHistory hist) {
|
public void setStatHistory(@NotNull ItemStat stat, @NotNull StatHistory hist) {
|
||||||
mergeableStatHistory.put(stat.getNBTPath(), hist);
|
mergeableStatHistory.put(stat, hist);
|
||||||
}
|
}
|
||||||
|
|
||||||
//region Other API
|
//region Other API
|
||||||
@ -217,7 +221,11 @@ public class MMOItem implements ItemReference {
|
|||||||
/**
|
/**
|
||||||
* @return The tier of this item, if it has one.
|
* @return The tier of this item, if it has one.
|
||||||
*/
|
*/
|
||||||
@Nullable public ItemTier getTier() { return MMOItems.plugin.getTiers().findTier(this); }
|
@Nullable
|
||||||
|
public ItemTier getTier() {
|
||||||
|
final @Nullable StatData found = stats.get(ItemStats.TIER);
|
||||||
|
return found == null ? null : MMOItems.plugin.getTiers().get(found.toString());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A MMOItem from the template only has damage
|
* A MMOItem from the template only has damage
|
||||||
@ -373,6 +381,7 @@ public class MMOItem implements ItemReference {
|
|||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region Gem Sockets API
|
//region Gem Sockets API
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* It is not 100% fool proof, since some GemStones just don't have
|
* It is not 100% fool proof, since some GemStones just don't have
|
||||||
* enough information to be extracted (legacy gemstones).
|
* enough information to be extracted (legacy gemstones).
|
||||||
@ -381,72 +390,37 @@ public class MMOItem implements ItemReference {
|
|||||||
* from calling it much because it completely loads all the stats
|
* from calling it much because it completely loads all the stats
|
||||||
* of every Gem Stone.
|
* of every Gem Stone.
|
||||||
*
|
*
|
||||||
* @see #getAsGemColor()
|
|
||||||
*
|
|
||||||
* @return The list of GemStones contained here.
|
* @return The list of GemStones contained here.
|
||||||
*/
|
*/
|
||||||
@NotNull public ArrayList<MMOItem> extractGemstones() {
|
@NotNull
|
||||||
//XTC//MMOItems.log("\u00a73 *\u00a77 Extracting gems from this\u00a7b " + getType() + " " + getId());
|
public List<Pair<GemstoneData, MMOItem>> extractGemstones() {
|
||||||
|
|
||||||
// Found?
|
// Found?
|
||||||
GemSocketsData thisSocketsData = (GemSocketsData) getData(ItemStats.GEM_SOCKETS);
|
final @Nullable GemSocketsData thisSocketsData = (GemSocketsData) getData(ItemStats.GEM_SOCKETS);
|
||||||
if (thisSocketsData == null) {
|
if (thisSocketsData == null)
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a77 Clear array - no data");
|
return new ArrayList<>();
|
||||||
return new ArrayList<>(); }
|
|
||||||
|
|
||||||
// All right, whats all yous data
|
// Find restored items
|
||||||
HashMap<UUID, MMOItem> regeneratedGems = new HashMap<>();
|
final List<Pair<GemstoneData, MMOItem>> pairs = new ArrayList<>();
|
||||||
for (GemstoneData gem : thisSocketsData.getGemstones()) {
|
for (GemstoneData gem : thisSocketsData.getGemstones()) {
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a77 Found gem stone -\u00a7a " + gem.getMMOItemType() + " " + gem.getMMOItemID());
|
final MMOItem restored = MMOItems.plugin.getMMOItem(MMOItems.plugin.getTypes().get(gem.getMMOItemType()), gem.getMMOItemID());
|
||||||
|
if (restored != null)
|
||||||
// Can we generate?
|
pairs.add(Pair.of(gem, restored));
|
||||||
MMOItem restored = MMOItems.plugin.getMMOItem(MMOItems.plugin.getTypes().get(gem.getMMOItemType()), gem.getMMOItemID());
|
|
||||||
|
|
||||||
// Valid? neat-o
|
|
||||||
if (restored != null) {
|
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a73>\u00a77 Valid, regenerated \u00a7e" + ((StringData) restored.getData(ItemStats.NAME)));
|
|
||||||
|
|
||||||
restored.asGemColor = gem.getSocketColor();
|
|
||||||
restored.asGemUUID = gem.getHistoricUUID();
|
|
||||||
regeneratedGems.put(gem.getHistoricUUID(), restored);
|
|
||||||
//XTC//MMOItems.log("\u00a7a >\u00a77 Color \u00a7e" + restored.getAsGemColor());
|
|
||||||
//XTC//MMOItems.log("\u00a7a >\u00a77 UUID \u00a7e" + restored.getAsGemUUID().toString());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//XTC//MMOItems.log("\u00a7b *\u00a77 Regen Size:\u00a79 " + regeneratedGems.values().size());
|
|
||||||
|
|
||||||
// If RevID updating, it basically just regenerates
|
// If RevID updating, no need to identify stats
|
||||||
if (MMOItemReforger.gemstonesRevIDWhenUnsocket) { return new ArrayList<>(regeneratedGems.values()); }
|
if (MMOItemReforger.gemstonesRevIDWhenUnsocket)
|
||||||
|
return pairs;
|
||||||
|
|
||||||
// Identify actual attributes
|
// Identify actual stats
|
||||||
for (ItemStat stat : getStats()) {
|
for (StatHistory hist : mergeableStatHistory.values())
|
||||||
|
for (Pair<GemstoneData, MMOItem> gem : pairs) {
|
||||||
|
final StatData historicGemData = hist.getGemstoneData(gem.getKey().getHistoricUUID());
|
||||||
|
if (historicGemData != null)
|
||||||
|
gem.getValue().setData(hist.getItemStat(), historicGemData);
|
||||||
|
}
|
||||||
|
|
||||||
// Mergeable right
|
return pairs;
|
||||||
if (!(stat.getClearStatData() instanceof Mergeable)) {
|
|
||||||
continue; }
|
|
||||||
|
|
||||||
// Any stat affected by gems is sure to have a Stat History
|
|
||||||
StatHistory hist = getStatHistory(stat);
|
|
||||||
if (hist == null) {
|
|
||||||
continue; }
|
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a7c>\u00a7a Found Stat History \u00a79" + stat.getId());
|
|
||||||
|
|
||||||
// Data associated with any of the gems?
|
|
||||||
for (Map.Entry<UUID, MMOItem> gem : regeneratedGems.entrySet()) {
|
|
||||||
|
|
||||||
// History got gem registered?
|
|
||||||
StatData historicGemData = hist.getGemstoneData(gem.getKey());
|
|
||||||
if (historicGemData == null) { continue;}
|
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a77 Found data for gem \u00a7e" + gem.getKey());
|
|
||||||
|
|
||||||
// This gemstone had this data... Override.
|
|
||||||
gem.getValue().setData(stat, historicGemData);
|
|
||||||
|
|
||||||
} }
|
|
||||||
|
|
||||||
// Thats the gemstones we was searching for
|
|
||||||
//XTC//MMOItems.log("\u00a7b *\u00a77 Result Size:\u00a79 " + regeneratedGems.values().size());
|
|
||||||
return new ArrayList<>(regeneratedGems.values());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -454,75 +428,31 @@ public class MMOItem implements ItemReference {
|
|||||||
* wish to actually remove the GemStone, you must do so through {@link #removeGemStone(UUID, String)}
|
* wish to actually remove the GemStone, you must do so through {@link #removeGemStone(UUID, String)}
|
||||||
*
|
*
|
||||||
* @param gem Gemstone that you believe is in here
|
* @param gem Gemstone that you believe is in here
|
||||||
*
|
|
||||||
* @return The gemstone as it was when inserted, or <code>null</code>
|
* @return The gemstone as it was when inserted, or <code>null</code>
|
||||||
* if such gemstone is not in here.
|
* if such gemstone is not in here.
|
||||||
*
|
|
||||||
* @see #extractGemstones() More optimized method for extracting all gemstones at the same time.
|
* @see #extractGemstones() More optimized method for extracting all gemstones at the same time.
|
||||||
*/
|
*/
|
||||||
@Nullable public MMOItem extractGemstone(@NotNull GemstoneData gem) {
|
@Nullable
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a77 Extracting gem stone -\u00a7a " + gem.getMMOItemType() + " " + gem.getMMOItemID());
|
public MMOItem extractGemstone(@NotNull GemstoneData gem) {
|
||||||
|
|
||||||
// Can we generate?
|
final MMOItem restored = MMOItems.plugin.getMMOItem(MMOItems.plugin.getTypes().get(gem.getMMOItemType()), gem.getMMOItemID());
|
||||||
MMOItem restored = MMOItems.plugin.getMMOItem(MMOItems.plugin.getTypes().get(gem.getMMOItemType()), gem.getMMOItemID());
|
if (restored == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
if (MMOItemReforger.gemstonesRevIDWhenUnsocket) { return restored; }
|
// If RevID updating, no need to identify stats
|
||||||
|
if (MMOItemReforger.gemstonesRevIDWhenUnsocket)
|
||||||
|
return restored;
|
||||||
|
|
||||||
// Valid? neat-o
|
// Identify actual stats
|
||||||
if (restored != null) {
|
for (StatHistory hist : mergeableStatHistory.values()) {
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a73>\u00a77 Valid, regenerated \u00a7e" + restored.getData(ItemStats.NAME));
|
final StatData historicGemData = hist.getGemstoneData(gem.getHistoricUUID());
|
||||||
|
if (historicGemData != null)
|
||||||
|
restored.setData(hist.getItemStat(), historicGemData);
|
||||||
|
}
|
||||||
|
|
||||||
restored.asGemColor = gem.getSocketColor();
|
|
||||||
restored.asGemUUID = gem.getHistoricUUID();
|
|
||||||
//XTC//MMOItems.log("\u00a7a >\u00a77 Color \u00a7e" + restored.getAsGemColor());
|
|
||||||
//XTC//MMOItems.log("\u00a7a >\u00a77 UUID \u00a7e" + restored.getAsGemUUID().toString());
|
|
||||||
|
|
||||||
// Cannot be removed
|
|
||||||
} else {
|
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a7c Gem too old / MMOItem missing");
|
|
||||||
return null; }
|
|
||||||
|
|
||||||
// Identify actual attributes
|
|
||||||
for (ItemStat stat : getStats()) {
|
|
||||||
|
|
||||||
// Mergeable right
|
|
||||||
if (!(stat.getClearStatData() instanceof Mergeable)) { continue; }
|
|
||||||
|
|
||||||
// Any stat affected by gems is sure to have a Stat History
|
|
||||||
StatHistory hist = getStatHistory(stat);
|
|
||||||
if (hist == null) { continue; }
|
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a7c>\u00a7a Found Stat History \u00a79" + stat.getId());
|
|
||||||
|
|
||||||
// History got gem registered?
|
|
||||||
StatData historicGemData = hist.getGemstoneData(gem.getHistoricUUID());
|
|
||||||
if (historicGemData == null) { continue;}
|
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a77 Found data for gem \u00a7e" + gem.getHistoricUUID());
|
|
||||||
|
|
||||||
// This gemstone had this data... Override.
|
|
||||||
restored.setData(stat, historicGemData); }
|
|
||||||
|
|
||||||
// That's it
|
|
||||||
//XTC//MMOItems.log("\u00a7a *\u00a77 Restored \u00a7e" + gem.getName() + "\u00a7a Successfully");
|
|
||||||
return restored;
|
return restored;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable String asGemColor;
|
|
||||||
@NotNull UUID asGemUUID = UUID.randomUUID();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Supposing this MMOItem is a Gem Stone within an item,
|
|
||||||
* obtained via {@link #extractGemstones()}, then this
|
|
||||||
* will be the color of the slot it occupies.
|
|
||||||
*/
|
|
||||||
@Nullable public String getAsGemColor() { return asGemColor; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Supposing this MMOItem is a Gem Stone within an item,
|
|
||||||
* obtained via {@link #extractGemstones()}, then what
|
|
||||||
* was its UUID?
|
|
||||||
*/
|
|
||||||
@NotNull public UUID getAsGemUUID() { return asGemUUID; }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes this UUID from all Stat Histories.
|
* Deletes this UUID from all Stat Histories.
|
||||||
*
|
*
|
||||||
|
@ -56,7 +56,7 @@ public class UnidentifiedItem extends ConfigItem {
|
|||||||
* load item data
|
* load item data
|
||||||
*/
|
*/
|
||||||
MMOItem mmoitem = new VolatileMMOItem(item);
|
MMOItem mmoitem = new VolatileMMOItem(item);
|
||||||
ItemTier tier = MMOItems.plugin.getTiers().findTier(mmoitem);
|
ItemTier tier = mmoitem.getTier();
|
||||||
int level = mmoitem.hasData(ItemStats.REQUIRED_LEVEL) ? (int) ((DoubleData) mmoitem.getData(ItemStats.REQUIRED_LEVEL)).getValue() : -1;
|
int level = mmoitem.hasData(ItemStats.REQUIRED_LEVEL) ? (int) ((DoubleData) mmoitem.getData(ItemStats.REQUIRED_LEVEL)).getValue() : -1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2,7 +2,6 @@ package net.Indyuce.mmoitems.manager;
|
|||||||
|
|
||||||
import io.lumine.mythic.lib.api.util.ui.FriendlyFeedbackCategory;
|
import io.lumine.mythic.lib.api.util.ui.FriendlyFeedbackCategory;
|
||||||
import io.lumine.mythic.lib.api.util.ui.FriendlyFeedbackProvider;
|
import io.lumine.mythic.lib.api.util.ui.FriendlyFeedbackProvider;
|
||||||
import net.Indyuce.mmoitems.ItemStats;
|
|
||||||
import net.Indyuce.mmoitems.MMOItems;
|
import net.Indyuce.mmoitems.MMOItems;
|
||||||
import net.Indyuce.mmoitems.api.ConfigFile;
|
import net.Indyuce.mmoitems.api.ConfigFile;
|
||||||
import net.Indyuce.mmoitems.api.ItemTier;
|
import net.Indyuce.mmoitems.api.ItemTier;
|
||||||
@ -116,17 +115,12 @@ public class TierManager implements Reloadable{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param item Item you seek the tier of
|
* @param item Item you seek the tier of
|
||||||
*
|
|
||||||
* @return The tier of this item, it it has any
|
* @return The tier of this item, it it has any
|
||||||
|
* @deprecated Use {@link MMOItem#getTier()}
|
||||||
*/
|
*/
|
||||||
@Nullable public ItemTier findTier(@NotNull MMOItem item) {
|
@Nullable
|
||||||
try {
|
@Deprecated
|
||||||
|
public ItemTier findTier(@NotNull MMOItem item) {
|
||||||
// Has that data?
|
return item.getTier();
|
||||||
return item.hasData(ItemStats.TIER) ? get(item.getData(ItemStats.TIER).toString()) : null;
|
|
||||||
|
|
||||||
// Pretty sure there is no way for this exception to be thrown tho
|
|
||||||
} catch (IllegalArgumentException exception) { return null; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,10 @@ import net.Indyuce.mmoitems.api.item.mmoitem.VolatileMMOItem;
|
|||||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||||
import net.Indyuce.mmoitems.api.util.message.Message;
|
import net.Indyuce.mmoitems.api.util.message.Message;
|
||||||
import net.Indyuce.mmoitems.stat.data.GemSocketsData;
|
import net.Indyuce.mmoitems.stat.data.GemSocketsData;
|
||||||
|
import net.Indyuce.mmoitems.stat.data.GemstoneData;
|
||||||
import net.Indyuce.mmoitems.stat.type.BooleanStat;
|
import net.Indyuce.mmoitems.stat.type.BooleanStat;
|
||||||
import net.Indyuce.mmoitems.stat.type.ConsumableItemInteraction;
|
import net.Indyuce.mmoitems.stat.type.ConsumableItemInteraction;
|
||||||
|
import net.Indyuce.mmoitems.util.Pair;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -64,8 +66,8 @@ public class CanUnsocket extends BooleanStat implements ConsumableItemInteractio
|
|||||||
* Cancel if no gem could be extracted.
|
* Cancel if no gem could be extracted.
|
||||||
*/
|
*/
|
||||||
mmo = new LiveMMOItem(target);
|
mmo = new LiveMMOItem(target);
|
||||||
ArrayList<MMOItem> mmoGemStones = mmo.extractGemstones();
|
final List<Pair<GemstoneData, MMOItem>> mmoGemStones = mmo.extractGemstones();
|
||||||
if (mmoGemStones.size() == 0) {
|
if (mmoGemStones.isEmpty()) {
|
||||||
Message.RANDOM_UNSOCKET_GEM_TOO_OLD.format(ChatColor.YELLOW, "#item#", MMOUtils.getDisplayName(event.getCurrentItem())).send(player);
|
Message.RANDOM_UNSOCKET_GEM_TOO_OLD.format(ChatColor.YELLOW, "#item#", MMOUtils.getDisplayName(event.getCurrentItem())).send(player);
|
||||||
return false; }
|
return false; }
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ public class DisplayName extends StringStat implements GemStoneStat {
|
|||||||
format = data.toString();
|
format = data.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemTier tier = MMOItems.plugin.getTiers().findTier(item.getMMOItem());
|
ItemTier tier = item.getMMOItem().getTier();
|
||||||
format = format.replace("<tier-name>", tier != null ? ChatColor.stripColor(tier.getName()) : "");
|
format = format.replace("<tier-name>", tier != null ? ChatColor.stripColor(tier.getName()) : "");
|
||||||
format = format.replace("<tier-color>", tier != null ? ChatColor.getLastColors(tier.getName()) : "&f");
|
format = format.replace("<tier-color>", tier != null ? ChatColor.getLastColors(tier.getName()) : "&f");
|
||||||
if (tier != null) {
|
if (tier != null) {
|
||||||
|
@ -5,9 +5,7 @@ import io.lumine.mythic.lib.api.util.ui.SilentNumbers;
|
|||||||
import net.Indyuce.mmoitems.ItemStats;
|
import net.Indyuce.mmoitems.ItemStats;
|
||||||
import net.Indyuce.mmoitems.MMOItems;
|
import net.Indyuce.mmoitems.MMOItems;
|
||||||
import net.Indyuce.mmoitems.MMOUtils;
|
import net.Indyuce.mmoitems.MMOUtils;
|
||||||
import net.Indyuce.mmoitems.api.ItemTier;
|
|
||||||
import net.Indyuce.mmoitems.api.Type;
|
import net.Indyuce.mmoitems.api.Type;
|
||||||
import net.Indyuce.mmoitems.api.event.item.DeconstructItemEvent;
|
|
||||||
import net.Indyuce.mmoitems.api.interaction.Consumable;
|
import net.Indyuce.mmoitems.api.interaction.Consumable;
|
||||||
import net.Indyuce.mmoitems.api.item.mmoitem.LiveMMOItem;
|
import net.Indyuce.mmoitems.api.item.mmoitem.LiveMMOItem;
|
||||||
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
|
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
|
||||||
@ -16,10 +14,11 @@ import net.Indyuce.mmoitems.api.player.PlayerData;
|
|||||||
import net.Indyuce.mmoitems.api.util.message.Message;
|
import net.Indyuce.mmoitems.api.util.message.Message;
|
||||||
import net.Indyuce.mmoitems.stat.data.DoubleData;
|
import net.Indyuce.mmoitems.stat.data.DoubleData;
|
||||||
import net.Indyuce.mmoitems.stat.data.GemSocketsData;
|
import net.Indyuce.mmoitems.stat.data.GemSocketsData;
|
||||||
|
import net.Indyuce.mmoitems.stat.data.GemstoneData;
|
||||||
import net.Indyuce.mmoitems.stat.type.ConsumableItemInteraction;
|
import net.Indyuce.mmoitems.stat.type.ConsumableItemInteraction;
|
||||||
import net.Indyuce.mmoitems.stat.type.DoubleStat;
|
import net.Indyuce.mmoitems.stat.type.DoubleStat;
|
||||||
import net.Indyuce.mmoitems.stat.type.StatHistory;
|
import net.Indyuce.mmoitems.stat.type.StatHistory;
|
||||||
import org.bukkit.Bukkit;
|
import net.Indyuce.mmoitems.util.Pair;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
@ -74,8 +73,8 @@ public class RandomUnsocket extends DoubleStat implements ConsumableItemInteract
|
|||||||
* Cancel if no gem could be extracted.
|
* Cancel if no gem could be extracted.
|
||||||
*/
|
*/
|
||||||
MMOItem mmo = new LiveMMOItem(target);
|
MMOItem mmo = new LiveMMOItem(target);
|
||||||
ArrayList<MMOItem> mmoGemStones = mmo.extractGemstones();
|
List<Pair<GemstoneData, MMOItem>> mmoGemStones = mmo.extractGemstones();
|
||||||
if (mmoGemStones.size() == 0) {
|
if (mmoGemStones.isEmpty()) {
|
||||||
Message.RANDOM_UNSOCKET_GEM_TOO_OLD.format(ChatColor.YELLOW, "#item#", MMOUtils.getDisplayName(event.getCurrentItem())).send(player);
|
Message.RANDOM_UNSOCKET_GEM_TOO_OLD.format(ChatColor.YELLOW, "#item#", MMOUtils.getDisplayName(event.getCurrentItem())).send(player);
|
||||||
return false; }
|
return false; }
|
||||||
|
|
||||||
@ -95,7 +94,10 @@ public class RandomUnsocket extends DoubleStat implements ConsumableItemInteract
|
|||||||
if (randomGem >= mmoGemStones.size()) { randomGem = mmoGemStones.size() - 1;}
|
if (randomGem >= mmoGemStones.size()) { randomGem = mmoGemStones.size() - 1;}
|
||||||
|
|
||||||
// Choose gem
|
// Choose gem
|
||||||
MMOItem gem = mmoGemStones.get(randomGem);
|
final Pair<GemstoneData, MMOItem> pair = mmoGemStones.get(randomGem);
|
||||||
|
final MMOItem gem = pair.getValue();
|
||||||
|
final GemstoneData gemData = pair.getKey();
|
||||||
|
|
||||||
mmoGemStones.remove(randomGem);
|
mmoGemStones.remove(randomGem);
|
||||||
//GEM//MMOItems.log("\u00a73 *\u00a77 Chose to remove\u00a7b " + gem.getType() + " " + gem.getId());
|
//GEM//MMOItems.log("\u00a73 *\u00a77 Chose to remove\u00a7b " + gem.getType() + " " + gem.getId());
|
||||||
|
|
||||||
@ -111,14 +113,14 @@ public class RandomUnsocket extends DoubleStat implements ConsumableItemInteract
|
|||||||
// Drop
|
// Drop
|
||||||
items2Drop.add(builtGem);
|
items2Drop.add(builtGem);
|
||||||
String chosenColor;
|
String chosenColor;
|
||||||
if (gem.getAsGemColor() != null) {
|
if (gemData.getSocketColor() != null) {
|
||||||
//GEM//MMOItems.log("\u00a7b *\u00a77 Restored slot\u00a7e " + gem.getAsGemColor());
|
//GEM//MMOItems.log("\u00a7b *\u00a77 Restored slot\u00a7e " + gem.getAsGemColor());
|
||||||
chosenColor = gem.getAsGemColor(); } else {
|
chosenColor = gemData.getSocketColor(); } else {
|
||||||
//GEM//MMOItems.log("\u00a7b *\u00a77 Restored slot\u00a76 " + GemSocketsData.getUncoloredGemSlot() + " \u00a78(Uncolored Def)");
|
//GEM//MMOItems.log("\u00a7b *\u00a77 Restored slot\u00a76 " + GemSocketsData.getUncoloredGemSlot() + " \u00a78(Uncolored Def)");
|
||||||
chosenColor = GemSocketsData.getUncoloredGemSlot(); }
|
chosenColor = GemSocketsData.getUncoloredGemSlot(); }
|
||||||
|
|
||||||
// Unregister
|
// Unregister
|
||||||
mmo.removeGemStone(gem.getAsGemUUID(), chosenColor);
|
mmo.removeGemStone(gemData.getHistoricUUID(), chosenColor);
|
||||||
|
|
||||||
// Gem Removal Count Decreased
|
// Gem Removal Count Decreased
|
||||||
s--;
|
s--;
|
||||||
|
Loading…
Reference in New Issue
Block a user