diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/util/crafting/CraftingRecipeDisplay.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/util/crafting/CraftingRecipeDisplay.java index c989e7ff..473423c8 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/util/crafting/CraftingRecipeDisplay.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/item/util/crafting/CraftingRecipeDisplay.java @@ -3,6 +3,7 @@ package net.Indyuce.mmoitems.api.item.util.crafting; import io.lumine.mythic.lib.MythicLib; import io.lumine.mythic.lib.api.item.ItemTag; import io.lumine.mythic.lib.api.item.NBTItem; +import io.lumine.mythic.lib.util.AdventureUtils; import net.Indyuce.mmoitems.api.crafting.ConditionalDisplay; import net.Indyuce.mmoitems.api.crafting.condition.CheckedCondition; import net.Indyuce.mmoitems.api.crafting.recipe.CheckedRecipe; @@ -17,7 +18,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.*; -import java.util.stream.Collectors; public class CraftingRecipeDisplay extends ConfigItem { public CraftingRecipeDisplay() { @@ -111,10 +111,8 @@ public class CraftingRecipeDisplay extends ConfigItem { ItemMeta meta = item.getItemMeta(); meta.addItemFlags(ItemFlag.values()); - meta.setDisplayName(MythicLib.plugin.parseColors(name.replace("#name#", (amount > 1 ? (ChatColor.WHITE + "" + amount + " x ") : "") + MMOUtils.getDisplayName(item)))); - meta.setLore(lore.stream() - .map(s -> MythicLib.plugin.parseColors(s)) - .collect(Collectors.toList())); + AdventureUtils.setDisplayName(meta, name.replace("#name#", (amount > 1 ? (ChatColor.WHITE + "" + amount + " x ") : "") + MMOUtils.getDisplayName(item))); + AdventureUtils.setLore(meta, lore); item.setItemMeta(meta); return NBTItem.get(item).addTag(new ItemTag("recipeId", craftingRecipe.getId())).toItem(); diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/player/PlayerData.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/player/PlayerData.java index 796246b6..0e8f324e 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/player/PlayerData.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/api/player/PlayerData.java @@ -436,8 +436,8 @@ public class PlayerData { /** * Called when the corresponding MMOPlayerData has already been initialized. */ - public static void load(@NotNull Player player) { - load(player.getUniqueId()); + public static @NotNull PlayerData load(@NotNull Player player) { + return load(player.getUniqueId()); } /** 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 aefdc231..4ff0d8bb 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 @@ -8,8 +8,6 @@ import io.lumine.mythic.lib.api.util.ui.SilentNumbers; import io.lumine.mythic.lib.util.AdventureUtils; import io.lumine.mythic.lib.version.VersionMaterial; import net.Indyuce.mmoitems.MMOItems; -import net.Indyuce.mmoitems.util.ColorUtils; -import net.Indyuce.mmoitems.util.MMOUtils; import net.Indyuce.mmoitems.api.Type; import net.Indyuce.mmoitems.api.edition.NewItemEdition; import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate; @@ -134,7 +132,7 @@ public class ItemBrowser extends PluginInventory { * Displays all the items of the chosen Type * ------------------------------ */ - Inventory inv = Bukkit.createInventory(this, 54, (deleteMode ? ("Delete Mode: ") : ("Item Explorer: ")) + ColorUtils.stripColors(type.getName())); + Inventory inv = Bukkit.createInventory(this, 54, (deleteMode ? ("Delete Mode: ") : ("Item Explorer: ")) + MythicLib.plugin.getAdventureParser().stripColors(type.getName())); /* * Build cool Item Stacks for buttons and sh diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/DisplayName.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/DisplayName.java index de1894bb..c244934a 100644 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/DisplayName.java +++ b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/stat/DisplayName.java @@ -14,7 +14,6 @@ import net.Indyuce.mmoitems.stat.type.GemStoneStat; import net.Indyuce.mmoitems.stat.type.NameData; import net.Indyuce.mmoitems.stat.type.StatHistory; import net.Indyuce.mmoitems.stat.type.StringStat; -import net.Indyuce.mmoitems.util.ColorUtils; import org.bukkit.ChatColor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -31,12 +30,14 @@ public class DisplayName extends StringStat implements GemStoneStat { @Override public void whenApplied(@NotNull ItemStackBuilder item, @NotNull StringData data) { final ItemTier tier = item.getMMOItem().getTier(); + final AdventureParser parser = MythicLib.plugin.getAdventureParser(); + String format = data.toString(); // Bake - String format = data.toString() - .replace("", tier != null ? ColorUtils.stripColors(tier.getName()) : "") - .replace("", tier != null ? ColorUtils.getLastColors(tier.getName()) : "&f") - .replace("", tier != null ? ColorUtils.stripDecoration(ColorUtils.getLastColors(tier.getName())) : "&f"); + format = format.replace("", tier != null ? parser.stripColors(tier.getUnparsedName()) : "") + .replace("", tier != null ? parser.lastColor(tier.getUnparsedName(), true) : "&f") + .replace("", tier != null ? parser.lastColor(tier.getUnparsedName(), false) : ""); + // Is this upgradable? format = cropUpgrade(format); diff --git a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/util/ColorUtils.java b/MMOItems-API/src/main/java/net/Indyuce/mmoitems/util/ColorUtils.java deleted file mode 100644 index e7cccc41..00000000 --- a/MMOItems-API/src/main/java/net/Indyuce/mmoitems/util/ColorUtils.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.Indyuce.mmoitems.util; - -import org.bukkit.ChatColor; -import org.jetbrains.annotations.NotNull; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * mmoitems - * 09/11/2022 - * - * @author Roch Blondiaux (Kiwix). - */ -public class ColorUtils { - - private static final Pattern STRIP_DECORATION_PATTERN = Pattern.compile("(?i)" + '§' + "[K-O]"); - private static final Pattern COLOR_TAG_PATTERN = Pattern.compile("(?i)<.*>"); - private static final Pattern START_COLOR_TAG_PATTERN = Pattern.compile("(?i)<[^/]*>"); - private static final Pattern MINI_MSG_DECORATION_PATTERN = Pattern.compile("(?i)(<|"); - - public static @NotNull String stripDecoration(@NotNull String input) { - return "%s%s".formatted(ChatColor.RESET, MINI_MSG_DECORATION_PATTERN.matcher(STRIP_DECORATION_PATTERN.matcher(input).replaceAll("")).replaceAll("")) - .replace('§', '&'); - } - - public static @NotNull String stripColors(@NotNull String input) { - return ChatColor.stripColor(COLOR_TAG_PATTERN.matcher(input).replaceAll("")); - } - - public static @NotNull String getLastColors(@NotNull String input) { - Matcher matcher = START_COLOR_TAG_PATTERN.matcher(input); - String lastMatch = null; - while (matcher.find()) - lastMatch = matcher.group(); - return lastMatch == null ? ChatColor.getLastColors(input) : lastMatch; - } -} diff --git a/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/PlayerListener.java b/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/PlayerListener.java index a188460f..f79a7f64 100644 --- a/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/PlayerListener.java +++ b/MMOItems-Dist/src/main/java/net/Indyuce/mmoitems/listener/PlayerListener.java @@ -31,13 +31,13 @@ import java.util.*; public class PlayerListener implements Listener { private final Map> deathItems = new HashMap<>(); - @EventHandler(priority = EventPriority.LOWEST) + @EventHandler(priority = EventPriority.NORMAL) public void loadPlayerData(PlayerJoinEvent event) { MMOItems.plugin.getRecipes().refreshRecipeBook(event.getPlayer()); PlayerData.load(event.getPlayer()); } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGH) public void savePlayerData(PlayerQuitEvent event) { PlayerData.get(event.getPlayer()).save(true); } @@ -49,7 +49,11 @@ public class PlayerListener implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void onDeathForUpgradeLoss(@NotNull PlayerDeathEvent event) { // No - if (event instanceof Cancellable) { if (((Cancellable) event).isCancelled()) { return; } } + if (event instanceof Cancellable) { + if (((Cancellable) event).isCancelled()) { + return; + } + } // Supports NPCs if (!PlayerData.has(event.getEntity())) return; @@ -161,7 +165,7 @@ public class PlayerListener implements Listener { * player cast abilities or attacks with not the correct stats * * @deprecated This does cost some performance and that update - * method NEEDS some improvement in the future + * method NEEDS some improvement in the future */ @Deprecated @EventHandler @@ -175,7 +179,7 @@ public class PlayerListener implements Listener { * player cast abilities or attacks with not the correct stats * * @deprecated This does cost some performance and that update - * method NEEDS some improvement in the future + * method NEEDS some improvement in the future */ @Deprecated @EventHandler @@ -186,11 +190,11 @@ public class PlayerListener implements Listener { /** * Some plugins like to interfere with dropping items when the * player dies, or whatever of that sort. - * + *

* MMOItems would hate to dupe items because of this, as such, we wait * 3 ticks for those plugins to reasonably complete their operations and * then downgrade the items the player still has equipped. - * + *

* If a plugin removes items in this time, they will be completely excluded * and no dupes will be caused, and if a plugin adds items, they will be * included and downgraded. I think that's reasonable behaviour. @@ -199,9 +203,12 @@ public class PlayerListener implements Listener { */ private static class DelayedDeathDowngrade extends BukkitRunnable { - @NotNull final PlayerDeathEvent event; + @NotNull + final PlayerDeathEvent event; - DelayedDeathDowngrade(@NotNull PlayerDeathEvent event) {this.event = event;} + DelayedDeathDowngrade(@NotNull PlayerDeathEvent event) { + this.event = event; + } @Override public void run() {