From b2135beae93b99893c596d454ad7a30b6e9fcff9 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sat, 18 Sep 2021 15:39:51 +0100 Subject: [PATCH] Changes for Paper enchantment API support; renaming EcoEnchant#getRarity to EcoEnchant#getEnchantmentRarity --- eco-core/core-plugin/build.gradle | 4 +- .../ecoenchants/command/CommandDebug.java | 2 +- .../command/CommandEnchantinfo.java | 2 +- .../command/CommandGiverandombook.java | 2 +- .../ecoenchants/display/EnchantmentCache.java | 2 +- .../ecoenchants/enchantments/EcoEnchant.java | 117 +++++++++++++++++- .../obtaining/EnchantingListeners.java | 6 +- .../support/obtaining/LootPopulator.java | 4 +- .../support/obtaining/VillagerListeners.java | 4 +- .../enchantments/util/PaperHelper.java | 25 ++++ 10 files changed, 152 insertions(+), 16 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/PaperHelper.java diff --git a/eco-core/core-plugin/build.gradle b/eco-core/core-plugin/build.gradle index 9c53c42f..be5052be 100644 --- a/eco-core/core-plugin/build.gradle +++ b/eco-core/core-plugin/build.gradle @@ -3,10 +3,10 @@ version rootProject.version dependencies { compileOnly project(":eco-core:core-proxy") - compileOnly 'org.spigotmc:spigot:1.17-R0.1-SNAPSHOT' + compileOnly 'org.spigotmc:spigot-api:1.17-R0.1-SNAPSHOT' compileOnly 'commons-io:commons-io:2.8.0' compileOnly 'com.comphenix.protocol:ProtocolLib:4.6.0-SNAPSHOT' compileOnly 'net.essentialsx:EssentialsX:2.19.0' - compileOnly 'com.destroystokyo.paper:paper-api:1.16.3-R0.1-SNAPSHOT' + compileOnly 'io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT' compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.4-SNAPSHOT' } \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandDebug.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandDebug.java index 2f784d5b..8d4ee0d6 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandDebug.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandDebug.java @@ -102,7 +102,7 @@ public class CommandDebug extends Subcommand { Set withIssues = new HashSet<>(); EcoEnchants.values().forEach(enchant -> { - if (enchant.getRarity() == null) { + if (enchant.getEnchantmentRarity() == null) { withIssues.add(enchant); } if (enchant.getTargets().isEmpty()) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandEnchantinfo.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandEnchantinfo.java index 79e1e92d..ea5941e6 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandEnchantinfo.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandEnchantinfo.java @@ -140,7 +140,7 @@ public class CommandEnchantinfo extends PluginCommand { final String finalName = EnchantmentCache.getEntry(enchantment).getName(); final String finalDescription = EnchantmentCache.getEntry(enchantment).getStringDescription(1); - final EnchantmentRarity finalRarity = enchantment.getRarity(); + final EnchantmentRarity finalRarity = enchantment.getEnchantmentRarity(); final String finalTargets = allTargets; final String finalConflicts = allConflicts; final String finalMaxLevel = maxLevel; diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandGiverandombook.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandGiverandombook.java index 3a980e1d..c93e3806 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandGiverandombook.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/CommandGiverandombook.java @@ -73,7 +73,7 @@ public class CommandGiverandombook extends Subcommand { if (!(enchantment instanceof EcoEnchant)) { return false; } - return ((EcoEnchant) enchantment).getRarity().equals(rarity); + return ((EcoEnchant) enchantment).getEnchantmentRarity().equals(rarity); } return true; }).collect(Collectors.toList()); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/EnchantmentCache.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/EnchantmentCache.java index f2addb96..60e77ca5 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/EnchantmentCache.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/EnchantmentCache.java @@ -109,7 +109,7 @@ public class EnchantmentCache { description = StringUtils.formatList(ecoEnchant.getWrappedDescription()); name = ecoEnchant.getDisplayName(); type = ecoEnchant.getType(); - rarity = ecoEnchant.getRarity(); + rarity = ecoEnchant.getEnchantmentRarity(); } else { description = Arrays.asList( WordUtils.wrap( diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java index e74d4c8a..35ed4ba7 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java @@ -5,13 +5,16 @@ import com.willfp.eco.core.requirement.Requirement; import com.willfp.eco.core.requirement.Requirements; import com.willfp.ecoenchants.EcoEnchantsPlugin; import com.willfp.ecoenchants.config.configs.EnchantmentConfig; +import com.willfp.ecoenchants.display.EnchantmentCache; import com.willfp.ecoenchants.enchantments.meta.EnchantmentRarity; import com.willfp.ecoenchants.enchantments.meta.EnchantmentTarget; import com.willfp.ecoenchants.enchantments.meta.EnchantmentType; import com.willfp.ecoenchants.enchantments.util.EnchantmentUtils; +import com.willfp.ecoenchants.enchantments.util.PaperHelper; import com.willfp.ecoenchants.enchantments.util.Watcher; import lombok.AccessLevel; import lombok.Getter; +import net.kyori.adventure.text.Component; import org.apache.commons.lang.Validate; import org.apache.commons.lang.WordUtils; import org.bukkit.Bukkit; @@ -19,9 +22,11 @@ import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.World; import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.EntityCategory; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.Listener; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; @@ -140,7 +145,7 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Watche * The rarity of the enchantment. */ @Getter - private EnchantmentRarity rarity; + private EnchantmentRarity enchantmentRarity; /** * If the enchantment is enabled. @@ -220,8 +225,8 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Watche */ public void update() { config.loadFromLang(); - rarity = config.getRarity(); - Validate.notNull(rarity, "Rarity specified in " + this.permissionName + " is invalid!"); + enchantmentRarity = config.getRarity(); + Validate.notNull(enchantmentRarity, "Rarity specified in " + this.permissionName + " is invalid!"); conflicts = config.getEnchantments(EcoEnchants.GENERAL_LOCATION + "conflicts"); grindstoneable = config.getBool(EcoEnchants.GENERAL_LOCATION + "grindstoneable"); availableFromTable = config.getBool(EcoEnchants.OBTAINING_LOCATION + "table"); @@ -439,4 +444,110 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Watche public boolean canEnchantItem(@NotNull final ItemStack itemStack) { return targetMaterials.contains(itemStack.getType()) || itemStack.getType().equals(Material.BOOK) || itemStack.getType().equals(Material.ENCHANTED_BOOK); } + + /** + * Paper parity. + *

+ * You should use EnchantmentCache instead. + * + * @param level The level. + * @return The display name. + * @deprecated Use {@link EnchantmentCache#getEntry(Enchantment)} instead. + */ + @Deprecated + @Override + public @NotNull Component displayName(final int level) { + return PaperHelper.toComponent(EnchantmentCache.getEntry(this).getNameWithLevel(level)); + } + + /** + * Paper parity. + *

+ * You should use {@link EcoEnchant#isAvailableFromVillager()} instead. + * + * @return If tradeable. + * @deprecated Use {@link EcoEnchant#isAvailableFromVillager()} instead. + */ + @Deprecated + @Override + public boolean isTradeable() { + return this.isAvailableFromVillager(); + } + + /** + * Paper parity. + *

+ * You should use {@link EcoEnchant#isAvailableFromLoot()} instead. + * + * @return If discoverable. + * @deprecated Use {@link EcoEnchant#isAvailableFromLoot()} instead. + */ + @Deprecated + @Override + public boolean isDiscoverable() { + return this.isAvailableFromLoot(); + } + + /** + * Paper parity. + *

+ * EcoEnchants has its own systems for everything like this. Will always return 0. + * + * @param level The level. + * @param entityCategory The category. + * @return 0 + * @deprecated EcoEnchants has its own systems for this. + */ + @Deprecated + @Override + public float getDamageIncrease(final int level, + @NotNull final EntityCategory entityCategory) { + return 0; + } + + /** + * Paper parity. + *

+ * EcoEnchants has its own systems for targets. + *

+ * Use {@link EcoEnchant#getTargets()} instead. + * + * @return An empty set. + * @deprecated Use {@link EcoEnchant#getTargets()}. + */ + @Deprecated + @Override + public @NotNull Set getActiveSlots() { + return new HashSet<>(); + } + + /** + * Paper parity. + *

+ * eco / EcoEnchants recodes display entirely. + * + * @return A translation key. + * @deprecated Useless method, all items will be display differently using eco. + */ + @Deprecated + @Override + public @NotNull String translationKey() { + return "ecoenchants:enchantment." + this.getKey().getKey(); + } + + /** + * Paper parity. + *

+ * EcoEnchants has its own systems for rarity. + *

+ * Use {@link EcoEnchant#getEnchantmentRarity()} instead. + * + * @return {@link io.papermc.paper.enchantments.EnchantmentRarity#COMMON}. + * @deprecated Use {@link EcoEnchant#getEnchantmentRarity()}. + */ + @Deprecated + @Override + public @NotNull io.papermc.paper.enchantments.EnchantmentRarity getRarity() { + return io.papermc.paper.enchantments.EnchantmentRarity.COMMON; + } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/EnchantingListeners.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/EnchantingListeners.java index 4ff77892..be25e8b6 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/EnchantingListeners.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/EnchantingListeners.java @@ -125,10 +125,10 @@ public class EnchantingListeners extends PluginDependent implements L if (!enchantment.canEnchantItem(item)) { continue; } - if (NumberUtils.randFloat(0, 1) > enchantment.getRarity().getTableProbability() * multiplier) { + if (NumberUtils.randFloat(0, 1) > enchantment.getEnchantmentRarity().getTableProbability() * multiplier) { continue; } - if (enchantment.getRarity().getMinimumLevel() > cost) { + if (enchantment.getEnchantmentRarity().getMinimumLevel() > cost) { continue; } if (!enchantment.isEnabled()) { @@ -172,7 +172,7 @@ public class EnchantingListeners extends PluginDependent implements L level = (int) Math.ceil(enchantlevel2 / enchantlevel3); } else { int maxLevel = this.getPlugin().getConfigYml().getInt("enchanting-table.maximum-obtainable-level"); - double enchantlevel1 = (cost / (double) enchantment.getRarity().getMinimumLevel()) / (maxLevel / (double) enchantment.getRarity().getMinimumLevel()); + double enchantlevel1 = (cost / (double) enchantment.getEnchantmentRarity().getMinimumLevel()) / (maxLevel / (double) enchantment.getEnchantmentRarity().getMinimumLevel()); double enchantlevel2 = NumberUtils.triangularDistribution(0, 1, enchantlevel1); double enchantlevel3 = 1 / maxLevelDouble; level = (int) Math.ceil(enchantlevel2 / enchantlevel3); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/LootPopulator.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/LootPopulator.java index 400b741a..8cf9f135 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/LootPopulator.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/LootPopulator.java @@ -92,11 +92,11 @@ public class LootPopulator extends BlockPopulator { int cap = 0; for (EcoEnchant enchantment : enchantments) { - if (enchantment == null || enchantment.getRarity() == null) { + if (enchantment == null || enchantment.getEnchantmentRarity() == null) { continue; } - if (NumberUtils.randFloat(0, 1) > enchantment.getRarity().getLootProbability() * multiplier) { + if (NumberUtils.randFloat(0, 1) > enchantment.getEnchantmentRarity().getLootProbability() * multiplier) { continue; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/VillagerListeners.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/VillagerListeners.java index 9e0bf8e8..a57264ef 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/VillagerListeners.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/support/obtaining/VillagerListeners.java @@ -73,7 +73,7 @@ public class VillagerListeners extends PluginDependent implements Lis EcoEnchant applied = null; for (EcoEnchant enchantment : enchantments) { - if (NumberUtils.randFloat(0, 1) > enchantment.getRarity().getVillagerProbability() * multiplier) { + if (NumberUtils.randFloat(0, 1) > enchantment.getEnchantmentRarity().getVillagerProbability() * multiplier) { continue; } @@ -167,7 +167,7 @@ public class VillagerListeners extends PluginDependent implements Lis double multiplier = 0.01; for (EcoEnchant enchantment : enchantments) { - if (NumberUtils.randFloat(0, 1) > enchantment.getRarity().getVillagerProbability() * multiplier) { + if (NumberUtils.randFloat(0, 1) > enchantment.getEnchantmentRarity().getVillagerProbability() * multiplier) { continue; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/PaperHelper.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/PaperHelper.java new file mode 100644 index 00000000..2048ecba --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/PaperHelper.java @@ -0,0 +1,25 @@ +package com.willfp.ecoenchants.enchantments.util; + +import lombok.experimental.UtilityClass; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.jetbrains.annotations.NotNull; + +@UtilityClass +public class PaperHelper { + private static final LegacyComponentSerializer SERIALIZER = LegacyComponentSerializer.builder() + .hexColors() + .useUnusualXRepeatedCharacterHexFormat() + .character('ยง') + .build(); + + /** + * Convert string to a component. + * + * @param string The string. + * @return The component. + */ + public static Component toComponent(@NotNull final String string) { + return SERIALIZER.deserialize(string); + } +}