GemStones now display their upgrade level (if they are set to scale with upgrades)

Bugfixes and polishing.
This commit is contained in:
Gunging 2021-05-10 00:12:55 -04:00
parent ac278179a9
commit 2766870937
3 changed files with 98 additions and 15 deletions

View File

@ -136,7 +136,7 @@ public class DisplayName extends StringStat implements GemStoneStat {
return format;
}
@NotNull String appendUpgradeLevel(@NotNull String format, int lvl) {
@NotNull public static String appendUpgradeLevel(@NotNull String format, int lvl) {
String suffix = MythicLib.plugin.parseColors(MMOItems.plugin.getConfig().getString("item-upgrading.name-suffix"));
//MMOItems.getConsole().sendMessage("Level " + upgradeLevel);
@ -157,7 +157,7 @@ public class DisplayName extends StringStat implements GemStoneStat {
}
String levelPrefix(@NotNull String template, int toLevel) {
@NotNull public static String levelPrefix(@NotNull String template, int toLevel) {
// Ez
template = template.replace("#lvl#", String.valueOf(toLevel));
@ -334,4 +334,6 @@ public class DisplayName extends StringStat implements GemStoneStat {
public RandomStatData whenInitialized(Object object) {
return new NameData(object.toString());
}
}

View File

@ -55,7 +55,28 @@ public class GemSockets extends ItemStat {
// Edit Lore
String empty = ItemStat.translate("empty-gem-socket"), filled = ItemStat.translate("filled-gem-socket");
List<String> lore = new ArrayList<>();
sockets.getGemstones().forEach(gem -> lore.add(filled.replace("#", gem.getName())));
for (GemstoneData gem : sockets.getGemstones()) {
String gemName = gem.getName();
// Upgrades?
if (item.getMMOItem().hasUpgradeTemplate()) {
int iLvl = item.getMMOItem().getUpgradeLevel();
if (iLvl != 0) {
Integer gLvl = gem.getLevel();
if (gLvl != null) {
int dLevel = iLvl - gLvl;
gemName = DisplayName.appendUpgradeLevel(gemName, dLevel);
}
}
}
lore.add(filled.replace("#", gemName));
}
sockets.getEmptySlots().forEach(slot -> lore.add(empty.replace("#", slot)));
item.getLore().insert("gem-stones", lore);
}

View File

@ -4,6 +4,10 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import io.lumine.mythic.lib.api.item.SupportedNBTTagValues;
import io.lumine.mythic.lib.api.util.ui.SilentNumbers;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.stat.data.StringData;
import org.apache.commons.lang.Validate;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@ -24,6 +28,7 @@ import net.Indyuce.mmoitems.stat.type.StringStat;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.util.AltChar;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class ItemTypeRestriction extends StringStat {
public ItemTypeRestriction() {
@ -117,19 +122,68 @@ public class ItemTypeRestriction extends StringStat {
lore.add(ChatColor.YELLOW + AltChar.listDash + " Right click to remove the last element.");
}
@Override public void whenApplied(@NotNull ItemStackBuilder item, @NotNull StatData data) {
// Add NBT
item.addItemTag(getAppliedNBT(data));
}
@NotNull
@Override
public void whenApplied(@NotNull ItemStackBuilder item, @NotNull StatData data) {
// List<String> displayedTypes = new ArrayList<String>();
//
// for (String typeId : (List<String>) values[0])
// try {
// displayedTypes.add(Type.valueOf(typeId).getName());
// } catch (Exception e) {
// }
//
// String joined = String.join(", ", displayedTypes);
// item.getLore().insert(getPath(), translate().replace("#", joined));
item.addItemTag(new ItemTag("MMOITEMS_ITEM_TYPE_RESTRICTION", String.join(",", ((StringListData) data).getList())));
public ArrayList<ItemTag> getAppliedNBT(@NotNull StatData data) {
// Make Array
ArrayList<ItemTag> ret = new ArrayList<>();
// Add that tag
String joined = data instanceof StringListData ? String.join(",", ((StringListData) data).getList()) : ((StringData) data).getString();
ret.add(new ItemTag(getNBTPath(), joined));
// Thats it
return ret;
}
@Override public void whenLoaded(@NotNull ReadMMOItem mmoitem) {
// Get tags
ArrayList<ItemTag> relevantTags = new ArrayList<>();
// Add sole tag
if (mmoitem.getNBT().hasTag(getNBTPath()))
relevantTags.add(ItemTag.getTagAtPath(getNBTPath(), mmoitem.getNBT(), SupportedNBTTagValues.STRING));
// Use that
StringListData bakedData = (StringListData) getLoadedNBT(relevantTags);
// Valid?
if (bakedData != null) {
// Set
mmoitem.setData(this, bakedData);
}
}
@Nullable @Override public StatData getLoadedNBT(@NotNull ArrayList<ItemTag> storedTags) {
// You got a double righ
ItemTag tg = ItemTag.getTagAtPath(getNBTPath(), storedTags);
// Found righ
if (tg != null) {
// Get number
String value = (String) tg.getValue();
ArrayList<String> tag = new ArrayList<>();
if (value.contains(",")) {
for (String t : value.split(",")) {
if (!t.isEmpty()) { tag.add(t); } }
} else { tag.add(value); }
// That's it
return new StringListData(tag);
}
// Fail
return null;
}
private boolean isValid(String format) {
@ -146,4 +200,10 @@ public class ItemTypeRestriction extends StringStat {
return false;
}
@NotNull
@Override
public StatData getClearStatData() {
return new StringListData();
}
}