From 500ab628dd6b2539d9be89659a0ad2a9b0b22e1b Mon Sep 17 00:00:00 2001 From: nossr50 Date: Tue, 18 Aug 2020 21:11:15 -0700 Subject: [PATCH] 2.1.143 --- Changelog.txt | 9 ++--- pom.xml | 2 +- .../com/gmail/nossr50/util/ItemUtils.java | 33 +++++++++---------- .../AbstractPersistentDataLayer.java | 17 ++++++++++ .../SpigotTemporaryDataLayer.java | 1 - .../gmail/nossr50/util/skills/SkillUtils.java | 28 ++++++++++++---- 6 files changed, 60 insertions(+), 30 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index cfedff549..f4fbe7d17 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,11 +1,12 @@ Version 2.1.143 - mcMMO now tracks super ability boosted items through item metadata + mcMMO now tracks super ability boosted items through persistent metadata mcMMO no longer relies on lore to tell if an item has been modified by a super ability - Slight buff to Rupture + Slight buff to Rupture (1 more tick duration across all ranks) + Lore no longer gets added to items being buffed by mcMMO NOTES: - The item tracking on 1.14+ is persistent (up until now its been temporary) - Lore still gets added and removed from the item, this is sort of a failsafe. It can be considered optional. + The item tracking is persistent for MC versions 1.13-1.16.2 (and beyond). However the code handling the persistence for 1.13.2 differs from the other versions. It shouldn't result in any problems. + Any items that currently have the "mcMMO Ability Tool" lore on them won't get touched by anything this update does, there is no way to tell what the true enchant values on those items should be. Version 2.1.142 Iron Arm Style renamed to Steel Arm Style diff --git a/pom.xml b/pom.xml index 402e8a0c7..4093a28f6 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.143-SNAPSHOT + 2.1.143 mcMMO https://github.com/mcMMO-Dev/mcMMO diff --git a/src/main/java/com/gmail/nossr50/util/ItemUtils.java b/src/main/java/com/gmail/nossr50/util/ItemUtils.java index e96e8949c..4fca5938b 100644 --- a/src/main/java/com/gmail/nossr50/util/ItemUtils.java +++ b/src/main/java/com/gmail/nossr50/util/ItemUtils.java @@ -15,7 +15,6 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.List; public final class ItemUtils { @@ -486,22 +485,22 @@ public final class ItemUtils { return itemMeta.hasDisplayName() && itemMeta.getDisplayName().equals(ChatColor.GOLD + LocaleLoader.getString("Item.ChimaeraWing.Name")); } - public static void addAbilityLore(@NotNull ItemStack itemStack) { - ItemMeta itemMeta = itemStack.getItemMeta(); - List itemLore = new ArrayList<>(); - - if(itemMeta == null) - return; - - if (itemMeta.hasLore()) { - itemLore = itemMeta.getLore(); - } - - itemLore.add("mcMMO Ability Tool"); - - itemMeta.setLore(itemLore); - itemStack.setItemMeta(itemMeta); - } +// public static void addAbilityLore(@NotNull ItemStack itemStack) { +// ItemMeta itemMeta = itemStack.getItemMeta(); +// List itemLore = new ArrayList<>(); +// +// if(itemMeta == null) +// return; +// +// if (itemMeta.hasLore()) { +// itemLore = itemMeta.getLore(); +// } +// +// itemLore.add("mcMMO Ability Tool"); +// +// itemMeta.setLore(itemLore); +// itemStack.setItemMeta(itemMeta); +// } public static void removeAbilityLore(@NotNull ItemStack itemStack) { ItemMeta itemMeta = itemStack.getItemMeta(); diff --git a/src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/AbstractPersistentDataLayer.java b/src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/AbstractPersistentDataLayer.java index ad28290bc..db07578cc 100644 --- a/src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/AbstractPersistentDataLayer.java +++ b/src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/AbstractPersistentDataLayer.java @@ -5,13 +5,16 @@ import com.gmail.nossr50.util.compat.layers.AbstractCompatibilityLayer; import org.bukkit.NamespacedKey; import org.bukkit.block.Furnace; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; import java.util.UUID; public abstract class AbstractPersistentDataLayer extends AbstractCompatibilityLayer { + public static final String LEGACY_ABILITY_TOOL_LORE = "mcMMO Ability Tool"; public final NamespacedKey superAbilityBoosted; public final String SUPER_ABILITY_BOOSTED = "super_ability_boosted"; @@ -36,4 +39,18 @@ public abstract class AbstractPersistentDataLayer extends AbstractCompatibilityL public abstract void removeBonusDigSpeedOnSuperAbilityTool(@NotNull ItemStack itemStack); + public boolean isLegacyAbilityTool(ItemStack itemStack) { + ItemMeta itemMeta = itemStack.getItemMeta(); + + if(itemMeta == null) + return false; + + List lore = itemMeta.getLore(); + + if(lore == null || lore.isEmpty()) + return false; + + return lore.contains(LEGACY_ABILITY_TOOL_LORE); + } + } diff --git a/src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/SpigotTemporaryDataLayer.java b/src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/SpigotTemporaryDataLayer.java index 744dbf830..c5b32138d 100644 --- a/src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/SpigotTemporaryDataLayer.java +++ b/src/main/java/com/gmail/nossr50/util/compat/layers/persistentdata/SpigotTemporaryDataLayer.java @@ -19,7 +19,6 @@ import java.util.UUID; public class SpigotTemporaryDataLayer extends AbstractPersistentDataLayer { private final String FURNACE_OWNER_METADATA_KEY = "mcMMO_furnace_owner"; - private final String ABILITY_TOOL_METADATA_KEY = "mcMMO_super_ability_tool"; @Override public boolean initializeLayer() { diff --git a/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java b/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java index cafb0710b..d9ccf532f 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java @@ -27,6 +27,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.ShapelessRecipe; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.jetbrains.annotations.NotNull; @@ -145,11 +146,13 @@ public class SkillUtils { int originalDigSpeed = heldItem.getEnchantmentLevel(Enchantment.DIG_SPEED); - //Add lore, add dig speed - ItemUtils.addAbilityLore(heldItem); //lore can be a secondary failsafe for 1.13 and below + //Add dig speed + + //Lore no longer gets added, no point to it afaik + //ItemUtils.addAbilityLore(heldItem); //lore can be a secondary failsafe for 1.13 and below ItemUtils.addDigSpeedToItem(heldItem, heldItem.getEnchantmentLevel(Enchantment.DIG_SPEED)); - //1.14+ will have persistent metadata for this item + //1.13.2+ will have persistent metadata for this item AbstractPersistentDataLayer compatLayer = mcMMO.getCompatibilityManager().getPersistentDataLayer(); compatLayer.setSuperAbilityBoostedItem(heldItem, originalDigSpeed); } @@ -211,14 +214,25 @@ public class SkillUtils { if(!ItemUtils.canBeSuperAbilityDigBoosted(itemStack)) return; - //Take the lore off - ItemUtils.removeAbilityLore(itemStack); - //1.14+ will have persistent metadata for this itemStack + //1.13.2+ will have persistent metadata for this itemStack AbstractPersistentDataLayer compatLayer = mcMMO.getCompatibilityManager().getPersistentDataLayer(); - if(compatLayer.isSuperAbilityBoosted(itemStack)) + if(compatLayer.isLegacyAbilityTool(itemStack)) { + ItemMeta itemMeta = itemStack.getItemMeta(); + + //TODO: can be optimized + if(itemMeta.hasEnchant(Enchantment.DIG_SPEED)) { + itemMeta.removeEnchant(Enchantment.DIG_SPEED); + } + + itemStack.setItemMeta(itemMeta); + ItemUtils.removeAbilityLore(itemStack); + } + + if(compatLayer.isSuperAbilityBoosted(itemStack)) { compatLayer.removeBonusDigSpeedOnSuperAbilityTool(itemStack); + } } public static void handleDurabilityChange(ItemStack itemStack, int durabilityModifier) {