From fbd104595dd64923ceb42ad6b1e33ec9af128651 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sun, 17 Jan 2021 18:44:33 +0000 Subject: [PATCH 01/35] Updated to use eco 3 and revamped give command --- build.gradle | 6 +- .../com/willfp/ecoarmor/EcoArmorPlugin.java | 10 ++- .../ecoarmor/commands/CommandEagive.java | 52 +++++++++---- .../ecoarmor/commands/CommandEareload.java | 3 +- .../ecoarmor/commands/TabcompleterEagive.java | 8 +- .../willfp/ecoarmor/config/configs/Sets.java | 3 +- .../willfp/ecoarmor/display/ArmorDisplay.java | 4 +- .../ecoarmor/display/packets/PacketChat.java | 2 +- .../com/willfp/ecoarmor/effects/Effect.java | 4 +- .../com/willfp/ecoarmor/sets/ArmorSet.java | 8 +- .../willfp/ecoarmor/sets/util/ArmorUtils.java | 4 +- .../willfp/ecoarmor/tiers/UpgradeCrystal.java | 29 ++++--- .../com/willfp/ecoarmor/util/ProxyUtils.java | 21 ++++++ .../core-plugin/src/main/resources/lang.yml | 8 +- .../core-plugin/src/main/resources/plugin.yml | 1 + .../ecoarmor/proxy/util/ProxyFactory.java | 75 +++++++++++++++++++ 16 files changed, 188 insertions(+), 50 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/ProxyUtils.java create mode 100644 eco-core/core-proxy/src/main/java/com/willfp/ecoarmor/proxy/util/ProxyFactory.java diff --git a/build.gradle b/build.gradle index 150cec2..f5afd41 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,6 @@ plugins { dependencies { implementation project(":eco-core").getSubprojects() - implementation 'com.willfp:eco:1.3.1' } allprojects { @@ -48,7 +47,7 @@ allprojects { } dependencies { - compileOnly 'com.willfp:eco:1.3.1' + compileOnly 'com.willfp:eco:3.0.0' compileOnly 'org.jetbrains:annotations:19.0.0' @@ -83,9 +82,6 @@ clean.doLast { } shadowJar { - relocate('org.apache.maven', 'com.willfp.ecoarmor.eco.shaded.maven') - relocate('org.bstats', 'com.willfp.ecoarmor.eco.shaded.bstats') - relocate('com.willfp.eco.util', 'com.willfp.ecoarmor.eco.util') // Dot is to prevent plugin being shaded into itself archiveFileName = findProperty("plugin-name") + " v" + findProperty("version") + ".jar" } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index fe089b9..8fd7e09 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -16,6 +16,7 @@ import com.willfp.ecoarmor.effects.Effects; import com.willfp.ecoarmor.sets.ArmorSets; import com.willfp.ecoarmor.tiers.CrystalListener; import com.willfp.ecoarmor.tiers.UpgradeCrystal; +import lombok.Getter; import org.bukkit.event.Listener; import java.util.ArrayList; @@ -24,11 +25,18 @@ import java.util.List; @SuppressWarnings("unused") public class EcoArmorPlugin extends AbstractEcoPlugin { + /** + * Instance of EcoArmor + */ + @Getter + private static EcoArmorPlugin instance; + /** * Internal constructor called by bukkit on plugin load. */ public EcoArmorPlugin() { - super("EcoArmor", 0, 10002, "com.willfp.ecoarmor.proxy", "&5"); + super("EcoArmor", 0, 10002, "com.willfp.ecoarmor.proxy", "&c"); + instance = this; } /** diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java index baf4ea7..42dfd0f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java @@ -2,11 +2,11 @@ package com.willfp.ecoarmor.commands; import com.willfp.eco.util.command.AbstractCommand; import com.willfp.eco.util.command.AbstractTabCompleter; -import com.willfp.eco.util.config.Configs; import com.willfp.eco.util.plugin.AbstractEcoPlugin; import com.willfp.ecoarmor.sets.ArmorSet; import com.willfp.ecoarmor.sets.ArmorSets; import com.willfp.ecoarmor.sets.meta.ArmorSlot; +import com.willfp.ecoarmor.tiers.UpgradeCrystal; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -34,12 +34,12 @@ public class CommandEagive extends AbstractCommand { public void onExecute(@NotNull final CommandSender sender, @NotNull final List args) { if (args.isEmpty()) { - sender.sendMessage(Configs.LANG.getMessage("needs-player")); + sender.sendMessage(this.getPlugin().getLangYml().getMessage("needs-player")); return; } if (args.size() == 1) { - sender.sendMessage(Configs.LANG.getMessage("needs-set")); + sender.sendMessage(this.getPlugin().getLangYml().getMessage("needs-item")); return; } @@ -47,22 +47,48 @@ public class CommandEagive extends AbstractCommand { Player reciever = Bukkit.getPlayer(recieverName); if (reciever == null) { - sender.sendMessage(Configs.LANG.getMessage("invalid-player")); + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-player")); return; } - String setName = args.get(1); - ArmorSet set = ArmorSets.getByName(setName); - if (set == null) { - sender.sendMessage(Configs.LANG.getMessage("invalid-set")); + String itemName = args.get(1); + if (!itemName.contains(":")) { + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); return; } - String message = Configs.LANG.getMessage("give-success"); - message = message.replace("%set%", set.getName()).replace("%recipient%", reciever.getName()); - sender.sendMessage(message); - for (ArmorSlot slot : ArmorSlot.values()) { - reciever.getInventory().addItem(set.getItemStack(slot)); + if (itemName.split(":")[0].equals("set")) { + ArmorSet set = ArmorSets.getByName(itemName.split(":")[1]); + if (set == null) { + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); + return; + } + + String message = this.getPlugin().getLangYml().getMessage("give-success"); + message = message.replace("%item%", set.getName() + " Set").replace("%recipient%", reciever.getName()); + sender.sendMessage(message); + for (ArmorSlot slot : ArmorSlot.values()) { + reciever.getInventory().addItem(set.getItemStack(slot)); + } + + return; } + + if (itemName.split(":")[0].equals("crystal")) { + UpgradeCrystal crystal = UpgradeCrystal.getByName(itemName.split(":")[1]); + if (crystal == null) { + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); + return; + } + + String message = this.getPlugin().getLangYml().getMessage("give-success"); + message = message.replace("%item%", crystal.getItemStack().getItemMeta().getDisplayName()).replace("%recipient%", reciever.getName()); + sender.sendMessage(message); + reciever.getInventory().addItem(crystal.getItemStack()); + + return; + } + + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEareload.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEareload.java index 638d0d2..2799043 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEareload.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEareload.java @@ -1,7 +1,6 @@ package com.willfp.ecoarmor.commands; import com.willfp.eco.util.command.AbstractCommand; -import com.willfp.eco.util.config.Configs; import com.willfp.eco.util.plugin.AbstractEcoPlugin; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; @@ -22,6 +21,6 @@ public class CommandEareload extends AbstractCommand { public void onExecute(@NotNull final CommandSender sender, @NotNull final List args) { this.getPlugin().reload(); - sender.sendMessage(Configs.LANG.getMessage("reloaded")); + sender.sendMessage(this.getPlugin().getLangYml().getMessage("reloaded")); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java index ef5119f..d81ac5a 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java @@ -3,8 +3,8 @@ package com.willfp.ecoarmor.commands; import com.willfp.eco.util.command.AbstractCommand; import com.willfp.eco.util.command.AbstractTabCompleter; import com.willfp.eco.util.config.updating.annotations.ConfigUpdater; -import com.willfp.ecoarmor.sets.ArmorSet; import com.willfp.ecoarmor.sets.ArmorSets; +import com.willfp.ecoarmor.tiers.UpgradeCrystal; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -21,13 +21,14 @@ public class TabcompleterEagive extends AbstractTabCompleter { /** * The cached enchantment names. */ - private static final List SET_NAMES = ArmorSets.values().stream().map(ArmorSet::getName).collect(Collectors.toList()); + private static final List SET_NAMES = new ArrayList<>(); /** * Instantiate a new tab-completer for /eagive. */ public TabcompleterEagive() { super((AbstractCommand) Objects.requireNonNull(Bukkit.getPluginCommand("eagive")).getExecutor()); + reload(); } /** @@ -36,7 +37,8 @@ public class TabcompleterEagive extends AbstractTabCompleter { @ConfigUpdater public static void reload() { SET_NAMES.clear(); - SET_NAMES.addAll(ArmorSets.values().stream().map(ArmorSet::getName).collect(Collectors.toList())); + SET_NAMES.addAll(ArmorSets.values().stream().map(armorSet -> "set:" + armorSet.getName()).collect(Collectors.toList())); + SET_NAMES.addAll(UpgradeCrystal.values().stream().map(crystal -> "crystal:" + crystal.getTier()).collect(Collectors.toList())); } /** diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Sets.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Sets.java index c03fcce..1adfcf6 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Sets.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Sets.java @@ -1,12 +1,13 @@ package com.willfp.ecoarmor.config.configs; import com.willfp.eco.util.config.BaseConfig; +import com.willfp.ecoarmor.EcoArmorPlugin; public class Sets extends BaseConfig { /** * sets.yml. */ public Sets() { - super("sets", false); + super("sets", false, EcoArmorPlugin.getInstance()); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java index a612bd3..8e89fd3 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java @@ -1,6 +1,6 @@ package com.willfp.ecoarmor.display; -import com.willfp.eco.util.config.Configs; +import com.willfp.ecoarmor.EcoArmorPlugin; import com.willfp.ecoarmor.sets.ArmorSet; import com.willfp.ecoarmor.sets.meta.ArmorSlot; import com.willfp.ecoarmor.sets.util.ArmorUtils; @@ -101,7 +101,7 @@ public class ArmorDisplay { List lore = new ArrayList<>(); for (String s : slotMeta.getLore()) { - lore.add(s.replace("%tier%", Configs.CONFIG.getString("tier." + tier + ".display"))); + lore.add(s.replace("%tier%", EcoArmorPlugin.getInstance().getLangYml().getString("tier." + tier + ".display"))); } meta.setLore(lore); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketChat.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketChat.java index e31423b..7750f5a 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketChat.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketChat.java @@ -4,10 +4,10 @@ import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.ListenerPriority; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedChatComponent; -import com.willfp.eco.util.ProxyUtils; import com.willfp.eco.util.plugin.AbstractEcoPlugin; import com.willfp.eco.util.protocollib.AbstractPacketAdapter; import com.willfp.ecoarmor.proxy.proxies.ChatComponentProxy; +import com.willfp.ecoarmor.util.ProxyUtils; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java index 5abb34c..87f15e6 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java @@ -1,6 +1,6 @@ package com.willfp.ecoarmor.effects; -import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import com.willfp.ecoarmor.EcoArmorPlugin; import lombok.AccessLevel; import lombok.Getter; import org.bukkit.event.Listener; @@ -11,7 +11,7 @@ public abstract class Effect implements Listener { * Instance of EcoArmor. */ @Getter(AccessLevel.PROTECTED) - private final AbstractEcoPlugin plugin = AbstractEcoPlugin.getInstance(); + private final EcoArmorPlugin plugin = EcoArmorPlugin.getInstance(); /** * The name of the effect. diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java index 15c4a11..813d7a8 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java @@ -1,16 +1,16 @@ package com.willfp.ecoarmor.sets; -import com.willfp.eco.common.recipes.lookup.RecipePartUtils; -import com.willfp.eco.util.ProxyUtils; import com.willfp.eco.util.StringUtils; -import com.willfp.eco.util.plugin.AbstractEcoPlugin; import com.willfp.eco.util.recipe.EcoShapedRecipe; +import com.willfp.eco.util.recipe.lookup.RecipePartUtils; +import com.willfp.ecoarmor.EcoArmorPlugin; import com.willfp.ecoarmor.config.EcoArmorConfigs; import com.willfp.ecoarmor.display.ArmorDisplay; import com.willfp.ecoarmor.effects.Effect; import com.willfp.ecoarmor.effects.Effects; import com.willfp.ecoarmor.proxy.proxies.SkullProxy; import com.willfp.ecoarmor.sets.meta.ArmorSlot; +import com.willfp.ecoarmor.util.ProxyUtils; import lombok.Getter; import org.bukkit.Color; import org.bukkit.Material; @@ -37,7 +37,7 @@ public class ArmorSet { /** * Instance of EcoArmor. */ - private static final AbstractEcoPlugin PLUGIN = AbstractEcoPlugin.getInstance(); + private static final EcoArmorPlugin PLUGIN = EcoArmorPlugin.getInstance(); /** * The name of the set. diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java index 02de847..201318e 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java @@ -1,6 +1,6 @@ package com.willfp.ecoarmor.sets.util; -import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import com.willfp.ecoarmor.EcoArmorPlugin; import com.willfp.ecoarmor.effects.Effect; import com.willfp.ecoarmor.sets.ArmorSet; import com.willfp.ecoarmor.sets.ArmorSets; @@ -25,7 +25,7 @@ public class ArmorUtils { /** * Instance of EcoArmor. */ - private static final AbstractEcoPlugin PLUGIN = AbstractEcoPlugin.getInstance(); + private static final EcoArmorPlugin PLUGIN = EcoArmorPlugin.getInstance(); /** * Get armor set on an item. diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java index 0ac411e..e2a3584 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java @@ -2,13 +2,13 @@ package com.willfp.ecoarmor.tiers; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; -import com.willfp.eco.common.recipes.lookup.RecipePartUtils; -import com.willfp.eco.common.recipes.parts.ComplexRecipePart; +import com.google.common.collect.ImmutableList; import com.willfp.eco.util.StringUtils; -import com.willfp.eco.util.config.Configs; import com.willfp.eco.util.config.updating.annotations.ConfigUpdater; -import com.willfp.eco.util.plugin.AbstractEcoPlugin; import com.willfp.eco.util.recipe.EcoShapedRecipe; +import com.willfp.eco.util.recipe.lookup.RecipePartUtils; +import com.willfp.eco.util.recipe.parts.ComplexRecipePart; +import com.willfp.ecoarmor.EcoArmorPlugin; import com.willfp.ecoarmor.display.ArmorDisplay; import com.willfp.ecoarmor.sets.util.ArmorUtils; import lombok.Getter; @@ -47,10 +47,10 @@ public class UpgradeCrystal { public static final UpgradeCrystal NETHERITE = new UpgradeCrystal("netherite"); /** - * Instance of ItemStats to create keys for. + * Instance of EcoArmor to create keys for. */ @Getter - private final AbstractEcoPlugin plugin = AbstractEcoPlugin.getInstance(); + private final EcoArmorPlugin plugin = EcoArmorPlugin.getInstance(); /** * The tier of the crystal. @@ -91,7 +91,7 @@ public class UpgradeCrystal { * Update the tracker's crafting recipe. */ public void update() { - this.enabled = Configs.CONFIG.getBool("tier." + tier + ".crystal-craftable"); + this.enabled = plugin.getConfigYml().getBool("tier." + tier + ".crystal-craftable"); NamespacedKey key = this.getPlugin().getNamespacedKeyFactory().create("upgrade_crystal"); ItemStack out = new ItemStack(Material.END_CRYSTAL); @@ -100,10 +100,10 @@ public class UpgradeCrystal { PersistentDataContainer container = outMeta.getPersistentDataContainer(); container.set(key, PersistentDataType.STRING, tier); - outMeta.setDisplayName(Configs.CONFIG.getString("tier." + tier + ".crystal-name")); + outMeta.setDisplayName(plugin.getConfigYml().getString("tier." + tier + ".crystal-name")); List lore = new ArrayList<>(); - for (String loreLine : Configs.CONFIG.getStrings("tier." + tier + ".crystal-lore")) { + for (String loreLine : plugin.getConfigYml().getStrings("tier." + tier + ".crystal-lore")) { lore.add(ArmorDisplay.PREFIX + StringUtils.translate(loreLine)); } outMeta.setLore(lore); @@ -115,7 +115,7 @@ public class UpgradeCrystal { EcoShapedRecipe.Builder builder = EcoShapedRecipe.builder(this.getPlugin(), "upgrade_crystal_" + tier) .setOutput(out); - List recipeStrings = Configs.CONFIG.getStrings("tier." + tier + ".crystal-recipe"); + List recipeStrings = plugin.getConfigYml().getStrings("tier." + tier + ".crystal-recipe"); RecipePartUtils.registerLookup("ecoarmor:upgrade_crystal_" + tier, s -> new ComplexRecipePart(test -> Objects.equals(tier, ArmorUtils.getCrystalTier(test)), out)); @@ -138,6 +138,15 @@ public class UpgradeCrystal { return BY_NAME.get(name); } + /** + * Get all registered {@link UpgradeCrystal}s. + * + * @return A list of all {@link UpgradeCrystal}s. + */ + public static List values() { + return ImmutableList.copyOf(BY_NAME.values()); + } + /** * Update. */ diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/ProxyUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/ProxyUtils.java new file mode 100644 index 0000000..6bd92bf --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/ProxyUtils.java @@ -0,0 +1,21 @@ +package com.willfp.ecoarmor.util; + +import com.willfp.eco.util.proxy.AbstractProxy; +import com.willfp.ecoarmor.EcoArmorPlugin; +import com.willfp.ecoarmor.proxy.util.ProxyFactory; +import lombok.experimental.UtilityClass; +import org.jetbrains.annotations.NotNull; + +@UtilityClass +public class ProxyUtils { + /** + * Get the implementation of a specified proxy. + * + * @param proxyClass The proxy interface. + * @param The type of the proxy. + * @return The proxy implementation. + */ + public @NotNull T getProxy(@NotNull final Class proxyClass) { + return new ProxyFactory<>(EcoArmorPlugin.getInstance(), proxyClass).getProxy(); + } +} diff --git a/eco-core/core-plugin/src/main/resources/lang.yml b/eco-core/core-plugin/src/main/resources/lang.yml index 2b980ed..1b87f76 100644 --- a/eco-core/core-plugin/src/main/resources/lang.yml +++ b/eco-core/core-plugin/src/main/resources/lang.yml @@ -1,12 +1,12 @@ messages: - prefix: "&5&lEcoArmor&r &8» &r" + prefix: "&c&lEcoArmor&r &8» &r" no-permission: "&cYou don't have permission to do this!" not-player: "&cThis command must be run by a player" reloaded: "Reloaded! (Restart if you're removed armor sets!)" needs-player: "&cYou must specify a player" invalid-player: "&cInvalid player!" - needs-set: "&cYou must specify a set" - invalid-set: "&cInvalid set!" - give-success: "Gave &a%set% Set&r to &a%recipient%" + needs-item: "&cYou must specify an item!" + invalid-item: "&cInvalid item!" + give-success: "Gave &a%item%&r to &a%recipient%" description-color: "&8" \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/plugin.yml b/eco-core/core-plugin/src/main/resources/plugin.yml index e321ded..b03cdab 100644 --- a/eco-core/core-plugin/src/main/resources/plugin.yml +++ b/eco-core/core-plugin/src/main/resources/plugin.yml @@ -6,6 +6,7 @@ authors: [ Auxilor ] website: willfp.com load: STARTUP depend: + - eco - ProtocolLib softdepend: - WorldGuard diff --git a/eco-core/core-proxy/src/main/java/com/willfp/ecoarmor/proxy/util/ProxyFactory.java b/eco-core/core-proxy/src/main/java/com/willfp/ecoarmor/proxy/util/ProxyFactory.java new file mode 100644 index 0000000..a2ca812 --- /dev/null +++ b/eco-core/core-proxy/src/main/java/com/willfp/ecoarmor/proxy/util/ProxyFactory.java @@ -0,0 +1,75 @@ +package com.willfp.ecoarmor.proxy.util; + +import com.willfp.eco.util.internal.PluginDependent; +import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import com.willfp.eco.util.proxy.AbstractProxy; +import com.willfp.eco.util.proxy.ProxyConstants; +import com.willfp.eco.util.proxy.UnsupportedVersionException; +import org.jetbrains.annotations.NotNull; + +import java.util.IdentityHashMap; +import java.util.Map; + +public class ProxyFactory extends PluginDependent { + /** + * Cached proxy implementations in order to not perform expensive reflective class-finding. + */ + private static final Map, AbstractProxy> CACHE = new IdentityHashMap<>(); + + /** + * The class of the proxy interface. + */ + private final Class proxyClass; + + /** + * Create a new Proxy Factory for a specific type. + * + * @param plugin The plugin to create proxies for. + * @param proxyClass The class of the proxy interface. + */ + public ProxyFactory(@NotNull final AbstractEcoPlugin plugin, + @NotNull final Class proxyClass) { + super(plugin); + this.proxyClass = proxyClass; + } + + /** + * Get the implementation of a proxy. + * + * @return The proxy implementation. + */ + public @NotNull T getProxy() { + try { + T cachedProxy = attemptCache(); + if (cachedProxy != null) { + return cachedProxy; + } + + String className = this.getPlugin().getProxyPackage() + "." + ProxyConstants.NMS_VERSION + "." + proxyClass.getSimpleName().replace("Proxy", ""); + final Class class2 = Class.forName(className); + Object instance = class2.getConstructor().newInstance(); + if (proxyClass.isAssignableFrom(class2) && proxyClass.isInstance(instance)) { + T proxy = proxyClass.cast(instance); + CACHE.put(proxyClass, proxy); + return proxy; + } + } catch (Exception e) { + // If not returned, then throw error + } + + throw new UnsupportedVersionException("You're running an unsupported server version: " + ProxyConstants.NMS_VERSION); + } + + private T attemptCache() { + Object proxy = CACHE.get(proxyClass); + if (proxy == null) { + return null; + } + + if (proxyClass.isInstance(proxy)) { + return proxyClass.cast(proxy); + } + + return null; + } +} From aa2810a160ad8aa4e319820228871210a5d9572b Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sun, 17 Jan 2021 18:45:03 +0000 Subject: [PATCH 02/35] Codestyle --- .../src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java | 2 +- .../main/java/com/willfp/ecoarmor/tiers/CrystalListener.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index 8fd7e09..0699cef 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -26,7 +26,7 @@ import java.util.List; @SuppressWarnings("unused") public class EcoArmorPlugin extends AbstractEcoPlugin { /** - * Instance of EcoArmor + * Instance of EcoArmor. */ @Getter private static EcoArmorPlugin instance; diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/CrystalListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/CrystalListener.java index e06d7bc..3a3572e 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/CrystalListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/CrystalListener.java @@ -54,4 +54,4 @@ public class CrystalListener extends PluginDependent implements Listener { event.setCancelled(true); } -} \ No newline at end of file +} From b9d7daa3bb5823275e5552f83293206387eedfaa Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 09:07:13 +0000 Subject: [PATCH 03/35] Added tiers.yml --- .../ecoarmor/config/EcoArmorConfigs.java | 7 + .../willfp/ecoarmor/config/configs/Tiers.java | 13 ++ .../willfp/ecoarmor/display/ArmorDisplay.java | 8 +- .../willfp/ecoarmor/sets/util/ArmorUtils.java | 42 +----- .../willfp/ecoarmor/tiers/UpgradeCrystal.java | 30 ++--- .../core-plugin/src/main/resources/config.yml | 68 ---------- .../core-plugin/src/main/resources/tiers.yml | 122 ++++++++++++++++++ 7 files changed, 164 insertions(+), 126 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Tiers.java create mode 100644 eco-core/core-plugin/src/main/resources/tiers.yml diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/EcoArmorConfigs.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/EcoArmorConfigs.java index 6fb1b07..6659574 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/EcoArmorConfigs.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/EcoArmorConfigs.java @@ -2,6 +2,7 @@ package com.willfp.ecoarmor.config; import com.willfp.eco.util.config.updating.annotations.ConfigUpdater; import com.willfp.ecoarmor.config.configs.Sets; +import com.willfp.ecoarmor.config.configs.Tiers; import lombok.experimental.UtilityClass; @UtilityClass @@ -11,6 +12,12 @@ public class EcoArmorConfigs { */ public static final Sets SETS = new Sets(); + + /** + * tiers.yml. + */ + public static final Tiers TIERS = new Tiers(); + /** * Update all configs. */ diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Tiers.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Tiers.java new file mode 100644 index 0000000..9af88d9 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Tiers.java @@ -0,0 +1,13 @@ +package com.willfp.ecoarmor.config.configs; + +import com.willfp.eco.util.config.BaseConfig; +import com.willfp.ecoarmor.EcoArmorPlugin; + +public class Tiers extends BaseConfig { + /** + * sets.yml. + */ + public Tiers() { + super("tiers", false, EcoArmorPlugin.getInstance()); + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java index 8e89fd3..e905521 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java @@ -1,6 +1,7 @@ package com.willfp.ecoarmor.display; import com.willfp.ecoarmor.EcoArmorPlugin; +import com.willfp.ecoarmor.config.EcoArmorConfigs; import com.willfp.ecoarmor.sets.ArmorSet; import com.willfp.ecoarmor.sets.meta.ArmorSlot; import com.willfp.ecoarmor.sets.util.ArmorUtils; @@ -17,6 +18,11 @@ import java.util.List; @UtilityClass public class ArmorDisplay { + /** + * Instance of EcoArmor. + */ + private static final EcoArmorPlugin PLUGIN = EcoArmorPlugin.getInstance(); + /** * The prefix for all EcoArmor lines to have in lore. */ @@ -101,7 +107,7 @@ public class ArmorDisplay { List lore = new ArrayList<>(); for (String s : slotMeta.getLore()) { - lore.add(s.replace("%tier%", EcoArmorPlugin.getInstance().getLangYml().getString("tier." + tier + ".display"))); + lore.add(s.replace("%tier%", EcoArmorConfigs.SETS.getString(tier + ".display"))); } meta.setLore(lore); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java index 201318e..0e369f7 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java @@ -1,6 +1,7 @@ package com.willfp.ecoarmor.sets.util; import com.willfp.ecoarmor.EcoArmorPlugin; +import com.willfp.ecoarmor.config.EcoArmorConfigs; import com.willfp.ecoarmor.effects.Effect; import com.willfp.ecoarmor.sets.ArmorSet; import com.willfp.ecoarmor.sets.ArmorSets; @@ -192,44 +193,9 @@ public class ArmorUtils { return; } - int armor = 0; - int toughness = 0; - int knockback = 0; - - if (tier.equals("iron")) { - if (slot == ArmorSlot.HELMET) { - armor = 2; - } else if (slot == ArmorSlot.CHESTPLATE) { - armor = 6; - } else if (slot == ArmorSlot.LEGGINGS) { - armor = 5; - } else if (slot == ArmorSlot.BOOTS) { - armor = 2; - } - } else if (tier.equals("diamond")) { - toughness = 2; - if (slot == ArmorSlot.HELMET) { - armor = 3; - } else if (slot == ArmorSlot.CHESTPLATE) { - armor = 8; - } else if (slot == ArmorSlot.LEGGINGS) { - armor = 6; - } else if (slot == ArmorSlot.BOOTS) { - armor = 3; - } - } else if (tier.equals("netherite")) { - toughness = 3; - knockback = 1; - if (slot == ArmorSlot.HELMET) { - armor = 3; - } else if (slot == ArmorSlot.CHESTPLATE) { - armor = 8; - } else if (slot == ArmorSlot.LEGGINGS) { - armor = 6; - } else if (slot == ArmorSlot.BOOTS) { - armor = 3; - } - } + int armor = EcoArmorConfigs.TIERS.getInt(tier + ".properties." + slot.name().toLowerCase() + ".armor"); + int toughness = EcoArmorConfigs.TIERS.getInt(tier + ".properties." + slot.name().toLowerCase() + ".toughness"); + int knockback = EcoArmorConfigs.TIERS.getInt(tier + ".properties." + slot.name().toLowerCase() + ".knockback-resistance"); if (armor > 0) { meta.removeAttributeModifier(Attribute.GENERIC_ARMOR); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java index e2a3584..b224737 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java @@ -9,6 +9,7 @@ import com.willfp.eco.util.recipe.EcoShapedRecipe; import com.willfp.eco.util.recipe.lookup.RecipePartUtils; import com.willfp.eco.util.recipe.parts.ComplexRecipePart; import com.willfp.ecoarmor.EcoArmorPlugin; +import com.willfp.ecoarmor.config.EcoArmorConfigs; import com.willfp.ecoarmor.display.ArmorDisplay; import com.willfp.ecoarmor.sets.util.ArmorUtils; import lombok.Getter; @@ -31,21 +32,6 @@ public class UpgradeCrystal { */ private static final BiMap BY_NAME = HashBiMap.create(); - /** - * Iron crystal. - */ - public static final UpgradeCrystal IRON = new UpgradeCrystal("iron"); - - /** - * Diamond crystal. - */ - public static final UpgradeCrystal DIAMOND = new UpgradeCrystal("diamond"); - - /** - * Netherite crystal. - */ - public static final UpgradeCrystal NETHERITE = new UpgradeCrystal("netherite"); - /** * Instance of EcoArmor to create keys for. */ @@ -91,7 +77,7 @@ public class UpgradeCrystal { * Update the tracker's crafting recipe. */ public void update() { - this.enabled = plugin.getConfigYml().getBool("tier." + tier + ".crystal-craftable"); + this.enabled = EcoArmorConfigs.SETS.getBool(tier + ".crystal-craftable"); NamespacedKey key = this.getPlugin().getNamespacedKeyFactory().create("upgrade_crystal"); ItemStack out = new ItemStack(Material.END_CRYSTAL); @@ -100,10 +86,10 @@ public class UpgradeCrystal { PersistentDataContainer container = outMeta.getPersistentDataContainer(); container.set(key, PersistentDataType.STRING, tier); - outMeta.setDisplayName(plugin.getConfigYml().getString("tier." + tier + ".crystal-name")); + outMeta.setDisplayName(EcoArmorConfigs.SETS.getString(tier + ".crystal-name")); List lore = new ArrayList<>(); - for (String loreLine : plugin.getConfigYml().getStrings("tier." + tier + ".crystal-lore")) { + for (String loreLine : EcoArmorConfigs.SETS.getStrings(tier + ".crystal-lore")) { lore.add(ArmorDisplay.PREFIX + StringUtils.translate(loreLine)); } outMeta.setLore(lore); @@ -115,7 +101,7 @@ public class UpgradeCrystal { EcoShapedRecipe.Builder builder = EcoShapedRecipe.builder(this.getPlugin(), "upgrade_crystal_" + tier) .setOutput(out); - List recipeStrings = plugin.getConfigYml().getStrings("tier." + tier + ".crystal-recipe"); + List recipeStrings = EcoArmorConfigs.SETS.getStrings(tier + ".crystal-recipe"); RecipePartUtils.registerLookup("ecoarmor:upgrade_crystal_" + tier, s -> new ComplexRecipePart(test -> Objects.equals(tier, ArmorUtils.getCrystalTier(test)), out)); @@ -152,6 +138,12 @@ public class UpgradeCrystal { */ @ConfigUpdater public static void reload() { + BY_NAME.clear(); + + for (String key : EcoArmorConfigs.TIERS.getConfig().getKeys(false)) { + new UpgradeCrystal(key); + } + BY_NAME.values().forEach(UpgradeCrystal::update); } } diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 46de2be..bed8fd8 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -2,71 +2,3 @@ # EcoArmor # by Auxilor # - -tier: - default: - display: "&8&lDEFAULT" - # No crystal for default - - iron: - display: "&7&lIRON" - crystal-craftable: true - crystal-name: "&7Iron Upgrade Crystal" - crystal-recipe: - - air - - iron_block - - air - - - iron_block - - leather_chestplate - - iron_block - - - air - - iron_block - - air - crystal-lore: - - "&8Drop this onto an armor piece" - - "&8to set its tier to:" - - "&7&lIRON" - - diamond: - display: "&b&lDIAMOND" - crystal-craftable: true - crystal-name: "&bDiamond Upgrade Crystal" - crystal-recipe: - - air - - diamond_block - - air - - - diamond_block - - ecoarmor:upgrade_crystal_iron - - diamond_block - - - air - - diamond_block - - air - crystal-lore: - - "&8Drop this onto an armor piece" - - "&8to set its tier to:" - - "&b&lDIAMOND" - - netherite: - display: "&c&lNETHERITE" - crystal-craftable: true - crystal-name: "&cNetherite Upgrade Crystal" - crystal-recipe: - - air - - netherite_block - - air - - - netherite_block - - ecoarmor:upgrade_crystal_diamond - - netherite_block - - - air - - netherite_block - - air - crystal-lore: - - "&8Drop this onto an armor piece" - - "&8to set its tier to:" - - "&c&lNETHERITE" diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml new file mode 100644 index 0000000..78dbfee --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -0,0 +1,122 @@ +# +# You can make any tiers you want, but you **cannot** remove default +# + + +default: + display: "&8&lDEFAULT" + # No crystal for default + +iron: + display: "&7&lIRON" + crystal-craftable: true + crystal-name: "&7Iron Upgrade Crystal" + crystal-recipe: + - air + - iron_block + - air + + - iron_block + - leather_chestplate + - iron_block + + - air + - iron_block + - air + crystal-lore: + - "&8Drop this onto an armor piece" + - "&8to set its tier to:" + - "&7&lIRON" + properties: + helmet: + armor: 2 + toughness: 0 + knockback-resistance: 0 + chestplate: + armor: 6 + toughenss: 0 + knockback-resistance: 0 + leggings: + armor: 5 + toughenss: 0 + knockback-resistance: 0 + boots: + armor: 2 + toughenss: 0 + knockback-resistance: 0 + +diamond: + display: "&b&lDIAMOND" + crystal-craftable: true + crystal-name: "&bDiamond Upgrade Crystal" + crystal-recipe: + - air + - diamond_block + - air + + - diamond_block + - ecoarmor:upgrade_crystal_iron + - diamond_block + + - air + - diamond_block + - air + crystal-lore: + - "&8Drop this onto an armor piece" + - "&8to set its tier to:" + - "&b&lDIAMOND" + properties: + helmet: + armor: 3 + toughness: 2 + knockback-resistance: 0 + chestplate: + armor: 8 + toughenss: 2 + knockback-resistance: 0 + leggings: + armor: 6 + toughenss: 2 + knockback-resistance: 0 + boots: + armor: 3 + toughenss: 2 + knockback-resistance: 0 + +netherite: + display: "&c&lNETHERITE" + crystal-craftable: true + crystal-name: "&cNetherite Upgrade Crystal" + crystal-recipe: + - air + - netherite_block + - air + + - netherite_block + - ecoarmor:upgrade_crystal_diamond + - netherite_block + + - air + - netherite_block + - air + crystal-lore: + - "&8Drop this onto an armor piece" + - "&8to set its tier to:" + - "&c&lNETHERITE" + properties: + helmet: + armor: 3 + toughness: 3 + knockback-resistance: 1 + chestplate: + armor: 8 + toughenss: 3 + knockback-resistance: 1 + leggings: + armor: 6 + toughenss: 3 + knockback-resistance: 1 + boots: + armor: 3 + toughenss: 3 + knockback-resistance: 1 \ No newline at end of file From 8f91c805d0dcc81f546757b028e695374f57fcfb Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 09:28:21 +0000 Subject: [PATCH 04/35] Fixed tiers.yml --- .../willfp/ecoarmor/display/ArmorDisplay.java | 12 ++++++------ .../willfp/ecoarmor/tiers/UpgradeCrystal.java | 8 ++++---- .../core-plugin/src/main/resources/tiers.yml | 18 +++++++++--------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java index e905521..15738a5 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java @@ -71,11 +71,6 @@ public class ArmorDisplay { return itemStack; } - ArmorSlot slot = ArmorSlot.getSlot(itemStack); - if (slot == null) { - return itemStack; - } - revertDisplay(itemStack); ItemMeta meta = itemStack.getItemMeta(); @@ -98,6 +93,11 @@ public class ArmorDisplay { return itemStack; } + ArmorSlot slot = ArmorSlot.getSlot(itemStack); + if (slot == null) { + return itemStack; + } + ItemStack slotStack = set.getItemStack(slot); ItemMeta slotMeta = slotStack.getItemMeta(); assert slotMeta != null; @@ -107,7 +107,7 @@ public class ArmorDisplay { List lore = new ArrayList<>(); for (String s : slotMeta.getLore()) { - lore.add(s.replace("%tier%", EcoArmorConfigs.SETS.getString(tier + ".display"))); + lore.add(s.replace("%tier%", EcoArmorConfigs.TIERS.getString(tier + ".display"))); } meta.setLore(lore); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java index b224737..853c40a 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java @@ -77,7 +77,7 @@ public class UpgradeCrystal { * Update the tracker's crafting recipe. */ public void update() { - this.enabled = EcoArmorConfigs.SETS.getBool(tier + ".crystal-craftable"); + this.enabled = EcoArmorConfigs.TIERS.getBool(tier + ".crystal-craftable"); NamespacedKey key = this.getPlugin().getNamespacedKeyFactory().create("upgrade_crystal"); ItemStack out = new ItemStack(Material.END_CRYSTAL); @@ -86,10 +86,10 @@ public class UpgradeCrystal { PersistentDataContainer container = outMeta.getPersistentDataContainer(); container.set(key, PersistentDataType.STRING, tier); - outMeta.setDisplayName(EcoArmorConfigs.SETS.getString(tier + ".crystal-name")); + outMeta.setDisplayName(EcoArmorConfigs.TIERS.getString(tier + ".crystal-name")); List lore = new ArrayList<>(); - for (String loreLine : EcoArmorConfigs.SETS.getStrings(tier + ".crystal-lore")) { + for (String loreLine : EcoArmorConfigs.TIERS.getStrings(tier + ".crystal-lore")) { lore.add(ArmorDisplay.PREFIX + StringUtils.translate(loreLine)); } outMeta.setLore(lore); @@ -101,7 +101,7 @@ public class UpgradeCrystal { EcoShapedRecipe.Builder builder = EcoShapedRecipe.builder(this.getPlugin(), "upgrade_crystal_" + tier) .setOutput(out); - List recipeStrings = EcoArmorConfigs.SETS.getStrings(tier + ".crystal-recipe"); + List recipeStrings = EcoArmorConfigs.TIERS.getStrings(tier + ".crystal-recipe"); RecipePartUtils.registerLookup("ecoarmor:upgrade_crystal_" + tier, s -> new ComplexRecipePart(test -> Objects.equals(tier, ArmorUtils.getCrystalTier(test)), out)); diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index 78dbfee..c238e3f 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -34,15 +34,15 @@ iron: knockback-resistance: 0 chestplate: armor: 6 - toughenss: 0 + toughness: 0 knockback-resistance: 0 leggings: armor: 5 - toughenss: 0 + toughness: 0 knockback-resistance: 0 boots: armor: 2 - toughenss: 0 + toughness: 0 knockback-resistance: 0 diamond: @@ -72,15 +72,15 @@ diamond: knockback-resistance: 0 chestplate: armor: 8 - toughenss: 2 + toughness: 2 knockback-resistance: 0 leggings: armor: 6 - toughenss: 2 + toughness: 2 knockback-resistance: 0 boots: armor: 3 - toughenss: 2 + toughness: 2 knockback-resistance: 0 netherite: @@ -110,13 +110,13 @@ netherite: knockback-resistance: 1 chestplate: armor: 8 - toughenss: 3 + toughness: 3 knockback-resistance: 1 leggings: armor: 6 - toughenss: 3 + toughness: 3 knockback-resistance: 1 boots: armor: 3 - toughenss: 3 + toughness: 3 knockback-resistance: 1 \ No newline at end of file From 6ca6331928d5f083b25dcfb7a9c10e94a80eb5b4 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 09:40:53 +0000 Subject: [PATCH 05/35] Added attack speed multiplier effect and manyullyn armor --- .../com/willfp/ecoarmor/effects/Effects.java | 34 +++++++-------- .../effects/AttackSpeedMultiplier.java | 41 +++++++++++++++++++ .../core-plugin/src/main/resources/tiers.yml | 40 +++++++++++++++++- 3 files changed, 98 insertions(+), 17 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java index 3e18ebd..91cd685 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java @@ -3,6 +3,7 @@ package com.willfp.ecoarmor.effects; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.ImmutableList; +import com.willfp.ecoarmor.effects.effects.AttackSpeedMultiplier; import com.willfp.ecoarmor.effects.effects.BonusHearts; import com.willfp.ecoarmor.effects.effects.BowDamageMultiplier; import com.willfp.ecoarmor.effects.effects.DamageMultiplier; @@ -26,20 +27,21 @@ public class Effects { /** * All registered effects. */ - private static final BiMap BY_NAME = HashBiMap.create(); + private static final BiMap> BY_NAME = HashBiMap.create(); - public static final Effect BOW_DAMAGE_MULTIPLIER = new BowDamageMultiplier(); - public static final Effect DAMAGE_MULTIPLIER = new DamageMultiplier(); - public static final Effect DAMAGE_TAKEN_MULTIPLIER = new DamageTakenMultiplier(); - public static final Effect EVADE_CHANCE = new EvadeChance(); - public static final Effect FALL_DAMAGE_MULTIPLIER = new FallDamageMultiplier(); - public static final Effect MELEE_DAMAGE_MULTIPLIER = new MeleeDamageMultiplier(); - public static final Effect TRIDENT_DAMAGE_MULTIPLIER = new TridentDamageMultiplier(); - public static final Effect BONUS_HEARTS = new BonusHearts(); - public static final Effect SPEED_MULTIPLIER = new SpeedMutiplier(); - public static final Effect EXPERIENCE_MULTIPLIER = new ExperienceMultiplier(); - public static final Effect REGENERATION_MULTIPLIER = new RegenerationMultiplier(); - public static final Effect WARP_CHANCE = new WarpChance(); + public static final Effect BOW_DAMAGE_MULTIPLIER = new BowDamageMultiplier(); + public static final Effect DAMAGE_MULTIPLIER = new DamageMultiplier(); + public static final Effect DAMAGE_TAKEN_MULTIPLIER = new DamageTakenMultiplier(); + public static final Effect EVADE_CHANCE = new EvadeChance(); + public static final Effect FALL_DAMAGE_MULTIPLIER = new FallDamageMultiplier(); + public static final Effect MELEE_DAMAGE_MULTIPLIER = new MeleeDamageMultiplier(); + public static final Effect TRIDENT_DAMAGE_MULTIPLIER = new TridentDamageMultiplier(); + public static final Effect BONUS_HEARTS = new BonusHearts(); + public static final Effect SPEED_MULTIPLIER = new SpeedMutiplier(); + public static final Effect EXPERIENCE_MULTIPLIER = new ExperienceMultiplier(); + public static final Effect REGENERATION_MULTIPLIER = new RegenerationMultiplier(); + public static final Effect WARP_CHANCE = new WarpChance(); + public static final Effect ATTACK_SPEED_MULTIPLIER = new AttackSpeedMultiplier(); /** * Get effect matching name. @@ -47,7 +49,7 @@ public class Effects { * @param name The name to query. * @return The matching effect, or null if not found. */ - public static Effect getByName(@NotNull final String name) { + public static Effect getByName(@NotNull final String name) { return BY_NAME.get(name); } @@ -56,7 +58,7 @@ public class Effects { * * @return The effects. */ - public static List values() { + public static List> values() { return ImmutableList.copyOf(BY_NAME.values()); } @@ -65,7 +67,7 @@ public class Effects { * * @param effect The effect to add. */ - public static void addNewEffect(@NotNull final Effect effect) { + public static void addNewEffect(@NotNull final Effect effect) { BY_NAME.remove(effect.getName()); BY_NAME.put(effect.getName(), effect); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java new file mode 100644 index 0000000..071f932 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java @@ -0,0 +1,41 @@ +package com.willfp.ecoarmor.effects.effects; + +import com.willfp.eco.util.events.armorequip.ArmorEquipEvent; +import com.willfp.ecoarmor.effects.Effect; +import com.willfp.ecoarmor.sets.util.ArmorUtils; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class AttackSpeedMultiplier extends Effect { + private static final UUID MODIFIER_UUID = UUID.nameUUIDFromBytes("attack-speed-multiplier".getBytes()); + + public AttackSpeedMultiplier() { + super("attack-speed-multiplier"); + } + + @EventHandler + public void onArmorEquip(@NotNull final ArmorEquipEvent event) { + Player player = event.getPlayer(); + + AttributeInstance movementSpeed = player.getAttribute(Attribute.GENERIC_ATTACK_SPEED); + assert movementSpeed != null; + + this.getPlugin().getScheduler().runLater(() -> { + Double multiplier = ArmorUtils.getEffectStrength(player, this); + if (multiplier == null) { + movementSpeed.removeModifier(new AttributeModifier(MODIFIER_UUID, "speed-multiplier", 0, AttributeModifier.Operation.MULTIPLY_SCALAR_1)); + } else { + AttributeModifier modifier = new AttributeModifier(MODIFIER_UUID, "speed-multiplier", multiplier - 1, AttributeModifier.Operation.MULTIPLY_SCALAR_1); + if (!movementSpeed.getModifiers().contains(modifier)) { + movementSpeed.addModifier(modifier); + } + } + }, 1); + } +} diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index c238e3f..b519e28 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -119,4 +119,42 @@ netherite: boots: armor: 3 toughness: 3 - knockback-resistance: 1 \ No newline at end of file + knockback-resistance: 1 + +manyullyn: + display: "&5&k!!&r &d&lMANYULLYN&r &5&k!!&r" + crystal-craftable: true + crystal-name: "&dManyullyn Upgrade Crystal" + crystal-recipe: + - ecoarmor:upgrade_crystal_netherite + - enchanted_golden_apple + - ecoarmor:upgrade_crystal_netherite + + - enchanted_golden_apple + - ecoarmor:upgrade_crystal_netherite + - enchanted_golden_apple + + - ecoarmor:upgrade_crystal_netherite + - enchanted_golden_apple + - ecoarmor:upgrade_crystal_netherite + crystal-lore: + - "&8Drop this onto an armor piece" + - "&8to set its tier to:" + - "&5&k!!&r &d&lMANYULLYN&r &5&k!!&r" + properties: + helmet: + armor: 3 + toughness: 5 + knockback-resistance: 2 + chestplate: + armor: 8 + toughness: 5 + knockback-resistance: 2 + leggings: + armor: 6 + toughness: 5 + knockback-resistance: 2 + boots: + armor: 3 + toughness: 5 + knockback-resistance: 2 \ No newline at end of file From ab3eca7c574d160917d685219bf9473860ded1a1 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 10:20:36 +0000 Subject: [PATCH 06/35] Added advancement shards --- .../com/willfp/ecoarmor/EcoArmorPlugin.java | 8 +- .../ecoarmor/commands/CommandEagive.java | 17 +++- .../ecoarmor/commands/TabcompleterEagive.java | 3 +- .../willfp/ecoarmor/display/ArmorDisplay.java | 2 +- .../com/willfp/ecoarmor/sets/ArmorSet.java | 77 ++++++++++++++-- .../willfp/ecoarmor/sets/util/ArmorUtils.java | 75 +++++++++++++++- .../advanced/AdvancementShardListener.java | 87 +++++++++++++++++++ .../crystal}/CrystalListener.java | 17 +++- .../crystal}/UpgradeCrystal.java | 2 +- .../core-plugin/src/main/resources/sets.yml | 16 ++++ .../core-plugin/src/main/resources/tiers.yml | 4 + 11 files changed, 294 insertions(+), 14 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java rename eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/{tiers => upgrades/crystal}/CrystalListener.java (75%) rename eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/{tiers => upgrades/crystal}/UpgradeCrystal.java (98%) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index 0699cef..fb6f3f7 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -14,8 +14,9 @@ import com.willfp.ecoarmor.display.packets.PacketSetSlot; import com.willfp.ecoarmor.display.packets.PacketWindowItems; import com.willfp.ecoarmor.effects.Effects; import com.willfp.ecoarmor.sets.ArmorSets; -import com.willfp.ecoarmor.tiers.CrystalListener; -import com.willfp.ecoarmor.tiers.UpgradeCrystal; +import com.willfp.ecoarmor.upgrades.advanced.AdvancementShardListener; +import com.willfp.ecoarmor.upgrades.crystal.CrystalListener; +import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; import lombok.Getter; import org.bukkit.event.Listener; @@ -126,7 +127,8 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { @Override public List getListeners() { return Arrays.asList( - new CrystalListener(this) + new CrystalListener(this), + new AdvancementShardListener(this) ); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java index 42dfd0f..69fe00f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java @@ -6,7 +6,7 @@ import com.willfp.eco.util.plugin.AbstractEcoPlugin; import com.willfp.ecoarmor.sets.ArmorSet; import com.willfp.ecoarmor.sets.ArmorSets; import com.willfp.ecoarmor.sets.meta.ArmorSlot; -import com.willfp.ecoarmor.tiers.UpgradeCrystal; +import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -89,6 +89,21 @@ public class CommandEagive extends AbstractCommand { return; } + if (itemName.split(":")[0].equals("shard")) { + ArmorSet set = ArmorSets.getByName(itemName.split(":")[1]); + if (set == null) { + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); + return; + } + + String message = this.getPlugin().getLangYml().getMessage("give-success"); + message = message.replace("%item%", set.getAdvancementShardItem().getItemMeta().getDisplayName()).replace("%recipient%", reciever.getName()); + sender.sendMessage(message); + reciever.getInventory().addItem(set.getAdvancementShardItem()); + + return; + } + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java index d81ac5a..3723e7f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java @@ -4,7 +4,7 @@ import com.willfp.eco.util.command.AbstractCommand; import com.willfp.eco.util.command.AbstractTabCompleter; import com.willfp.eco.util.config.updating.annotations.ConfigUpdater; import com.willfp.ecoarmor.sets.ArmorSets; -import com.willfp.ecoarmor.tiers.UpgradeCrystal; +import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -38,6 +38,7 @@ public class TabcompleterEagive extends AbstractTabCompleter { public static void reload() { SET_NAMES.clear(); SET_NAMES.addAll(ArmorSets.values().stream().map(armorSet -> "set:" + armorSet.getName()).collect(Collectors.toList())); + SET_NAMES.addAll(ArmorSets.values().stream().map(armorSet -> "shard:" + armorSet.getName()).collect(Collectors.toList())); SET_NAMES.addAll(UpgradeCrystal.values().stream().map(crystal -> "crystal:" + crystal.getTier()).collect(Collectors.toList())); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java index 15738a5..1e147a6 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java @@ -5,7 +5,7 @@ import com.willfp.ecoarmor.config.EcoArmorConfigs; import com.willfp.ecoarmor.sets.ArmorSet; import com.willfp.ecoarmor.sets.meta.ArmorSlot; import com.willfp.ecoarmor.sets.util.ArmorUtils; -import com.willfp.ecoarmor.tiers.UpgradeCrystal; +import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; import lombok.experimental.UtilityClass; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java index 813d7a8..7621e18 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java @@ -51,6 +51,12 @@ public class ArmorSet { @Getter private final Map, Object> effects = new HashMap<>(); + /** + * Effects and their strengths on advanced armor. + */ + @Getter + private final Map, Object> advancedEffects = new HashMap<>(); + /** * Potion effects to be applied on equip. */ @@ -62,6 +68,17 @@ public class ArmorSet { */ private final Map items = new HashMap<>(); + /** + * Items in advanced set. + */ + private final Map advancedItems = new HashMap<>(); + + /** + * Advancement shard item. + */ + @Getter + private final ItemStack advancementShardItem; + /** * Create a new Armor Set. * @@ -76,15 +93,40 @@ public class ArmorSet { effects.put(effect, value); } - for (ArmorSlot slot : ArmorSlot.values()) { - ItemStack item = construct(slot.name().toLowerCase()); - items.put(slot, item); + for (String effectName : EcoArmorConfigs.SETS.getConfig().getConfigurationSection(name + ".advanced-set-bonus").getKeys(false)) { + Effect effect = Effects.getByName(effectName); + Object value = EcoArmorConfigs.SETS.getConfig().get(name + ".advanced-set-bonus." + effectName); + advancedEffects.put(effect, value); } + for (ArmorSlot slot : ArmorSlot.values()) { + ItemStack item = construct(slot.name().toLowerCase(), false); + items.put(slot, item); + + ItemStack advancedItem = construct(slot.name().toLowerCase(), true); + advancedItems.put(slot, advancedItem); + } + + ItemStack shardItem = new ItemStack(Material.PRISMARINE_SHARD); + ItemMeta shardMeta = shardItem.getItemMeta(); + assert shardMeta != null; + shardMeta.setDisplayName(EcoArmorConfigs.SETS.getString(name + ".advancement-shard-name")); + + + List shardLore = new ArrayList<>(); + for (String loreLine : EcoArmorConfigs.SETS.getStrings(name + ".advancement-shard-lore")) { + shardLore.add(ArmorDisplay.PREFIX + StringUtils.translate(loreLine)); + } + shardMeta.setLore(shardLore); + shardMeta.getPersistentDataContainer().set(PLUGIN.getNamespacedKeyFactory().create("advancement-shard"), PersistentDataType.STRING, name); + shardItem.setItemMeta(shardMeta); + this.advancementShardItem = shardItem; + ArmorSets.addNewSet(this); } - private ItemStack construct(@NotNull final String slot) { + private ItemStack construct(@NotNull final String slot, + final boolean advanced) { String pieceName = slot.toLowerCase(); Material material = Material.getMaterial(EcoArmorConfigs.SETS.getString(name + "." + pieceName + ".material").toUpperCase()); @@ -101,13 +143,24 @@ public class ArmorSet { assert meta != null; - String displayName = EcoArmorConfigs.SETS.getString(name + "." + pieceName + ".name"); + String displayName; + if (advanced) { + displayName = EcoArmorConfigs.SETS.getString(name + "." + pieceName + ".advanced-name"); + } else { + displayName = EcoArmorConfigs.SETS.getString(name + "." + pieceName + ".name"); + } List lore = new ArrayList<>(); for (String loreLine : EcoArmorConfigs.SETS.getStrings(name + "." + pieceName + ".lore")) { lore.add(ArmorDisplay.PREFIX + StringUtils.translate(loreLine)); } + if (advanced) { + for (String loreLine : EcoArmorConfigs.SETS.getStrings(name + ".advanced-lore")) { + lore.add(ArmorDisplay.PREFIX + StringUtils.translate(loreLine)); + } + } + if (meta instanceof SkullMeta) { String base64 = EcoArmorConfigs.SETS.getString(name + "." + pieceName + ".skull-texture"); ProxyUtils.getProxy(SkullProxy.class).setTexture((SkullMeta) meta, base64); @@ -130,6 +183,9 @@ public class ArmorSet { PersistentDataContainer container = meta.getPersistentDataContainer(); container.set(PLUGIN.getNamespacedKeyFactory().create("set"), PersistentDataType.STRING, name); container.set(PLUGIN.getNamespacedKeyFactory().create("tier"), PersistentDataType.STRING, "default"); + if (advanced) { + container.set(PLUGIN.getNamespacedKeyFactory().create("advanced"), PersistentDataType.INTEGER, 1); + } itemStack.setItemMeta(meta); constructRecipe(slot, itemStack); @@ -172,6 +228,17 @@ public class ArmorSet { return (T) effects.get(effect); } + /** + * Get effect strength of effect on advanced armor. + * + * @param effect The effect to query. + * @param The type of the effect value. + * @return The strength. + */ + public T getAdvancedEffectStrength(@NotNull final Effect effect) { + return (T) advancedEffects.get(effect); + } + @Override public boolean equals(final Object o) { if (this == o) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java index 0e369f7..1533ae2 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java @@ -111,7 +111,13 @@ public class ArmorUtils { return null; } - return set.getEffectStrength(effect); + T strength = set.getEffectStrength(effect); + + if (isAdvanced(player)) { + strength = set.getAdvancedEffectStrength(effect); + } + + return strength; } /** @@ -212,4 +218,71 @@ public class ArmorUtils { itemStack.setItemMeta(meta); } + + /** + * Get if player is wearing advanced set. + * + * @param player The player to check. + * @return If advanced. + */ + public static boolean isAdvanced(@NotNull final Player player) { + if (getSetOnPlayer(player) == null) { + return false; + } + + for (ItemStack itemStack : player.getInventory().getArmorContents()) { + if (itemStack == null) { + return false; + } + + if (!isAdvanced(itemStack)) { + return false; + } + } + + return true; + } + + /** + * Get if item is advanced. + * + * @param itemStack The item to check. + * @return If advanced. + */ + public static boolean isAdvanced(@NotNull final ItemStack itemStack) { + ItemMeta meta = itemStack.getItemMeta(); + + if (meta == null) { + return false; + } + + if (meta.getPersistentDataContainer().has(PLUGIN.getNamespacedKeyFactory().create("advanced"), PersistentDataType.INTEGER)) { + return meta.getPersistentDataContainer().get(PLUGIN.getNamespacedKeyFactory().create("advanced"), PersistentDataType.INTEGER) == 1; + } + + return false; + } + + /** + * Set if item is advanced. + * + * @param itemStack The item to set. + * @param advanced If the item should be advanced. + */ + public static void setAdvanced(@NotNull final ItemStack itemStack, + final boolean advanced) { + ItemMeta meta = itemStack.getItemMeta(); + + if (meta == null) { + return; + } + + if (getSetOnItem(itemStack) == null) { + return; + } + + meta.getPersistentDataContainer().set(PLUGIN.getNamespacedKeyFactory().create("advanced"), PersistentDataType.INTEGER, advanced ? 1 : 0); + + itemStack.setItemMeta(meta); + } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java new file mode 100644 index 0000000..124c03d --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java @@ -0,0 +1,87 @@ +package com.willfp.ecoarmor.upgrades.advanced; + +import com.willfp.eco.util.internal.PluginDependent; +import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import com.willfp.ecoarmor.sets.ArmorSet; +import com.willfp.ecoarmor.sets.ArmorSets; +import com.willfp.ecoarmor.sets.util.ArmorUtils; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; +import org.jetbrains.annotations.NotNull; + +public class AdvancementShardListener extends PluginDependent implements Listener { + /** + * Create new listeners for dragging crystals onto items. + * + * @param plugin The plugin to listen for. + */ + public AdvancementShardListener(@NotNull final AbstractEcoPlugin plugin) { + super(plugin); + } + + /** + * Listen for inventory click event. + * + * @param event The event to handle. + */ + @EventHandler + public void onDrag(@NotNull final InventoryClickEvent event) { + ItemStack current = event.getCurrentItem(); + ItemStack cursor = event.getCursor(); + + if (current == null || cursor == null) { + return; + } + + if (cursor.getType() != Material.PRISMARINE_SHARD) { + return; + } + + ItemMeta cursorMeta = cursor.getItemMeta(); + + if (cursorMeta == null) { + return; + } + + boolean isAdvancementShard = cursorMeta.getPersistentDataContainer().has(this.getPlugin().getNamespacedKeyFactory().create("advancement-shard"), PersistentDataType.STRING); + + if (!isAdvancementShard) { + return; + } + + String shardSet = cursorMeta.getPersistentDataContainer().get(this.getPlugin().getNamespacedKeyFactory().create("advancement-shard"), PersistentDataType.STRING); + + if (shardSet == null) { + return; + } + + ArmorSet set = ArmorUtils.getSetOnItem(current); + + if (set == null) { + return; + } + + if (!ArmorSets.getByName(shardSet).getName().equals(set.getName())) { + return; + } + + if (current.getType() == Material.AIR) { + return; + } + + if (ArmorUtils.isAdvanced(current)) { + return; + } + + ArmorUtils.setAdvanced(current, true); + + event.getWhoClicked().setItemOnCursor(null); + + event.setCancelled(true); + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/CrystalListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java similarity index 75% rename from eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/CrystalListener.java rename to eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java index 3a3572e..e38a519 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/CrystalListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java @@ -1,7 +1,8 @@ -package com.willfp.ecoarmor.tiers; +package com.willfp.ecoarmor.upgrades.crystal; import com.willfp.eco.util.internal.PluginDependent; import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import com.willfp.ecoarmor.config.EcoArmorConfigs; import com.willfp.ecoarmor.sets.util.ArmorUtils; import org.bukkit.Material; import org.bukkit.event.EventHandler; @@ -48,6 +49,20 @@ public class CrystalListener extends PluginDependent implements Listener { return; } + String previousTier = ArmorUtils.getTier(current); + + String prereq = EcoArmorConfigs.TIERS.getString(tier + ".requires-tier"); + boolean allowed = false; + if (prereq.equals("none")) { + allowed = true; + } else if (prereq.equals(previousTier)) { + allowed = true; + } + + if (!allowed) { + return; + } + ArmorUtils.setTier(current, tier); event.getWhoClicked().setItemOnCursor(null); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/UpgradeCrystal.java similarity index 98% rename from eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java rename to eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/UpgradeCrystal.java index 853c40a..1d9bc22 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/tiers/UpgradeCrystal.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/UpgradeCrystal.java @@ -1,4 +1,4 @@ -package com.willfp.ecoarmor.tiers; +package com.willfp.ecoarmor.upgrades.crystal; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index b2ab6d7..cdd2f6b 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -1,6 +1,17 @@ Reaper: set-bonus: damage-multiplier: 1.25 + advanced-set-bonus: + damage-taken-multiplier: 0.9 + advanced-lore: + - "" + - "&6&lADVANCED BONUS" + - "&8» &6Take 10% less damage" + - "&8&oRequires full set to be worn" + advancement-shard-name: "&6Advancement Shard: &cReaper" + advancement-shard-lore: + - "&8Drop this onto &cReaper Armor" + - "&8to make it &6Advanced&8." helmet: enchants: protection: 4 @@ -8,6 +19,7 @@ Reaper: material: leather_helmet leather-color: "#303030" name: "&cReaper Helmet" + advanced-name: "&cAdvanced Reaper Helmet" lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -34,6 +46,7 @@ Reaper: material: leather_chestplate leather-color: "#303030" name: "&cReaper Chestplate" + advanced-name: "&cAdvanced Reaper Chestplate" lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -59,6 +72,7 @@ Reaper: unbreaking: 3 material: elytra name: "&cReaper Elytra" + advanced-name: "&cAdvanced Reaper Elytra" lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -85,6 +99,7 @@ Reaper: material: leather_leggings leather-color: "#303030" name: "&cReaper Leggings" + advanced-name: "&cAdvanced Reaper Leggings" lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -111,6 +126,7 @@ Reaper: material: leather_boots leather-color: "#303030" name: "&cReaper Boots" + advanced-name: "&cAdvanced Reaper Boots" lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index b519e28..6f9a6c6 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -9,6 +9,7 @@ default: iron: display: "&7&lIRON" + requires-tier: default # Set to 'none' to always allow application crystal-craftable: true crystal-name: "&7Iron Upgrade Crystal" crystal-recipe: @@ -47,6 +48,7 @@ iron: diamond: display: "&b&lDIAMOND" + requires-tier: iron # Set to 'none' to always allow application crystal-craftable: true crystal-name: "&bDiamond Upgrade Crystal" crystal-recipe: @@ -85,6 +87,7 @@ diamond: netherite: display: "&c&lNETHERITE" + requires-tier: diamond # Set to 'none' to always allow application crystal-craftable: true crystal-name: "&cNetherite Upgrade Crystal" crystal-recipe: @@ -123,6 +126,7 @@ netherite: manyullyn: display: "&5&k!!&r &d&lMANYULLYN&r &5&k!!&r" + requires-tier: netherite # Set to 'none' to always allow application crystal-craftable: true crystal-name: "&dManyullyn Upgrade Crystal" crystal-recipe: From 591f8965a326ce8c3c3f37a4bbc915435a68ced4 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 10:42:34 +0000 Subject: [PATCH 07/35] Added shard recipes --- .../willfp/ecoarmor/display/ArmorDisplay.java | 21 ++++++-- .../com/willfp/ecoarmor/sets/ArmorSet.java | 49 +++++++++++++++++-- .../willfp/ecoarmor/sets/util/ArmorUtils.java | 23 +++++++++ .../advanced/AdvancementShardListener.java | 6 --- .../core-plugin/src/main/resources/sets.yml | 13 +++++ 5 files changed, 98 insertions(+), 14 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java index 1e147a6..e2c3290 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java @@ -84,12 +84,17 @@ public class ArmorDisplay { String crystalTier = ArmorUtils.getCrystalTier(itemStack); UpgradeCrystal crystal = UpgradeCrystal.getByName(crystalTier); - if (crystalTier == null || crystal == null) { - return itemStack; + if (crystalTier != null && crystal != null) { + meta.setLore(UpgradeCrystal.getByName(crystalTier).getItemStack().getItemMeta().getLore()); + itemStack.setItemMeta(meta); + } + + ArmorSet shardSet = ArmorUtils.getShardSet(itemStack); + + if (shardSet != null) { + itemStack.setItemMeta(shardSet.getAdvancementShardItem().getItemMeta()); } - meta.setLore(UpgradeCrystal.getByName(crystalTier).getItemStack().getItemMeta().getLore()); - itemStack.setItemMeta(meta); return itemStack; } @@ -98,7 +103,13 @@ public class ArmorDisplay { return itemStack; } - ItemStack slotStack = set.getItemStack(slot); + ItemStack slotStack; + + if (ArmorUtils.isAdvanced(itemStack)) { + slotStack = set.getAdvancedItemStack(slot); + } else { + slotStack = set.getItemStack(slot); + } ItemMeta slotMeta = slotStack.getItemMeta(); assert slotMeta != null; diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java index 7621e18..5b3466f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java @@ -3,6 +3,7 @@ package com.willfp.ecoarmor.sets; import com.willfp.eco.util.StringUtils; import com.willfp.eco.util.recipe.EcoShapedRecipe; import com.willfp.eco.util.recipe.lookup.RecipePartUtils; +import com.willfp.eco.util.recipe.parts.ComplexRecipePart; import com.willfp.ecoarmor.EcoArmorPlugin; import com.willfp.ecoarmor.config.EcoArmorConfigs; import com.willfp.ecoarmor.display.ArmorDisplay; @@ -10,6 +11,7 @@ import com.willfp.ecoarmor.effects.Effect; import com.willfp.ecoarmor.effects.Effects; import com.willfp.ecoarmor.proxy.proxies.SkullProxy; import com.willfp.ecoarmor.sets.meta.ArmorSlot; +import com.willfp.ecoarmor.sets.util.ArmorUtils; import com.willfp.ecoarmor.util.ProxyUtils; import lombok.Getter; import org.bukkit.Color; @@ -107,22 +109,44 @@ public class ArmorSet { advancedItems.put(slot, advancedItem); } + this.advancementShardItem = constructShard(); + + ArmorSets.addNewSet(this); + } + + private ItemStack constructShard() { ItemStack shardItem = new ItemStack(Material.PRISMARINE_SHARD); ItemMeta shardMeta = shardItem.getItemMeta(); assert shardMeta != null; shardMeta.setDisplayName(EcoArmorConfigs.SETS.getString(name + ".advancement-shard-name")); + shardMeta.addEnchant(Enchantment.DURABILITY, 3, true); + shardMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); List shardLore = new ArrayList<>(); for (String loreLine : EcoArmorConfigs.SETS.getStrings(name + ".advancement-shard-lore")) { shardLore.add(ArmorDisplay.PREFIX + StringUtils.translate(loreLine)); } + shardMeta.setLore(shardLore); shardMeta.getPersistentDataContainer().set(PLUGIN.getNamespacedKeyFactory().create("advancement-shard"), PersistentDataType.STRING, name); - shardItem.setItemMeta(shardMeta); - this.advancementShardItem = shardItem; - ArmorSets.addNewSet(this); + shardItem.setItemMeta(shardMeta); + + if (EcoArmorConfigs.SETS.getBool(name + ".shard-craftable")) { + EcoShapedRecipe.Builder builder = EcoShapedRecipe.builder(PLUGIN, this.getName() + "_shard").setOutput(shardItem); + + List recipeStrings = EcoArmorConfigs.SETS.getStrings(name + ".shard-recipe"); + + for (int i = 0; i < 9; i++) { + builder.setRecipePart(i, RecipePartUtils.lookup(recipeStrings.get(i))); + } + + EcoShapedRecipe recipe = builder.build(); + recipe.register(); + } + + return shardItem; } private ItemStack construct(@NotNull final String slot, @@ -188,6 +212,15 @@ public class ArmorSet { } itemStack.setItemMeta(meta); + + RecipePartUtils.registerLookup("ecoarmor:set_" + name.toLowerCase() + "_" + pieceName, s -> new ComplexRecipePart(test -> { + if (ArmorSlot.getSlot(test) != ArmorSlot.getSlot(itemStack)) { + return false; + } + return Objects.equals(this, ArmorUtils.getSetOnItem(test)); + }, itemStack)); + + constructRecipe(slot, itemStack); return itemStack; @@ -217,6 +250,16 @@ public class ArmorSet { return items.get(slot); } + /** + * Get item stack from slot. + * + * @param slot The slot. + * @return The item. + */ + public ItemStack getAdvancedItemStack(@NotNull final ArmorSlot slot) { + return advancedItems.get(slot); + } + /** * Get effect strength of effect. * diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java index 1533ae2..035c7ab 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java @@ -285,4 +285,27 @@ public class ArmorUtils { itemStack.setItemMeta(meta); } + + /** + * Get if item is advanced. + * + * @param itemStack The item to check. + * @return If advanced. + */ + @Nullable + public static ArmorSet getShardSet(@NotNull final ItemStack itemStack) { + ItemMeta meta = itemStack.getItemMeta(); + + if (meta == null) { + return null; + } + + String shardSet = meta.getPersistentDataContainer().get(PLUGIN.getNamespacedKeyFactory().create("advancement-shard"), PersistentDataType.STRING); + + if (shardSet == null) { + return null; + } + + return ArmorSets.getByName(shardSet); + } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java index 124c03d..3351ef7 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java @@ -48,12 +48,6 @@ public class AdvancementShardListener extends PluginDependent implements Listene return; } - boolean isAdvancementShard = cursorMeta.getPersistentDataContainer().has(this.getPlugin().getNamespacedKeyFactory().create("advancement-shard"), PersistentDataType.STRING); - - if (!isAdvancementShard) { - return; - } - String shardSet = cursorMeta.getPersistentDataContainer().get(this.getPlugin().getNamespacedKeyFactory().create("advancement-shard"), PersistentDataType.STRING); if (shardSet == null) { diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index cdd2f6b..5ad1b23 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -12,6 +12,19 @@ Reaper: advancement-shard-lore: - "&8Drop this onto &cReaper Armor" - "&8to make it &6Advanced&8." + shard-craftable: true + shard-recipe: + - prismarine_shard + - ecoarmor:set_reaper_helmet + - prismarine_shard + + - ecoarmor:set_reaper_chestplate + - ecoarmor:upgrade_crystal_manyullyn + - ecoarmor:set_reaper_leggings + + - prismarine_shard + - ecoarmor:set_reaper_boots + - prismarine_shard helmet: enchants: protection: 4 From 275f607f481550e21c59bc8b49a85f7b4e56fd73 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 10:57:18 +0000 Subject: [PATCH 08/35] Added more options to eagive --- .../ecoarmor/commands/CommandEagive.java | 27 +++++++++++++++- .../ecoarmor/commands/TabcompleterEagive.java | 16 ++++++++++ .../willfp/ecoarmor/sets/meta/ArmorSlot.java | 31 +++++++++++++++++++ .../core-plugin/src/main/resources/sets.yml | 2 +- 4 files changed, 74 insertions(+), 2 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java index 69fe00f..293008c 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java @@ -67,8 +67,33 @@ public class CommandEagive extends AbstractCommand { String message = this.getPlugin().getLangYml().getMessage("give-success"); message = message.replace("%item%", set.getName() + " Set").replace("%recipient%", reciever.getName()); sender.sendMessage(message); + + boolean advanced = false; + if (args.size() >= 4) { + advanced = Boolean.parseBoolean(args.get(3)); + } + + if (args.size() >= 3) { + ArmorSlot slot = ArmorSlot.getSlot(args.get(2)); + + if (slot == null) { + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); + return; + } + + if (advanced) { + reciever.getInventory().addItem(set.getAdvancedItemStack(slot)); + } else { + reciever.getInventory().addItem(set.getItemStack(slot)); + } + } + for (ArmorSlot slot : ArmorSlot.values()) { - reciever.getInventory().addItem(set.getItemStack(slot)); + if (advanced) { + reciever.getInventory().addItem(set.getAdvancedItemStack(slot)); + } else { + reciever.getInventory().addItem(set.getItemStack(slot)); + } } return; diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java index 3723e7f..c64e333 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java @@ -4,6 +4,7 @@ import com.willfp.eco.util.command.AbstractCommand; import com.willfp.eco.util.command.AbstractTabCompleter; import com.willfp.eco.util.config.updating.annotations.ConfigUpdater; import com.willfp.ecoarmor.sets.ArmorSets; +import com.willfp.ecoarmor.sets.meta.ArmorSlot; import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -12,6 +13,7 @@ import org.bukkit.util.StringUtil; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -71,6 +73,20 @@ public class TabcompleterEagive extends AbstractTabCompleter { return completions; } + if (args.size() == 3) { + StringUtil.copyPartialMatches(args.get(2), Arrays.stream(ArmorSlot.values()).map(slot -> slot.name().toLowerCase()).collect(Collectors.toList()), completions); + + Collections.sort(completions); + return completions; + } + + if (args.size() == 4) { + StringUtil.copyPartialMatches(args.get(3), Arrays.asList("true", "false"), completions); + + Collections.sort(completions); + return completions; + } + return new ArrayList<>(0); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java index 32ec13d..9a7fa1d 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java @@ -76,4 +76,35 @@ public enum ArmorSlot { return null; } + + /** + * Get ArmorSlot from name. + * + * @param name The name. + * @return The slot, or null. + */ + @Nullable + public static ArmorSlot getSlot(@NotNull final String name) { + if (name.equalsIgnoreCase("helmet")) { + return HELMET; + } + + if (name.equalsIgnoreCase("chestplate")) { + return CHESTPLATE; + } + + if (name.equalsIgnoreCase("elytra")) { + return ELYTRA; + } + + if (name.equalsIgnoreCase("leggings")) { + return LEGGINGS; + } + + if (name.equalsIgnoreCase("boots")) { + return BOOTS; + } + + return null; + } } diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index 5ad1b23..2854c3b 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -19,7 +19,7 @@ Reaper: - prismarine_shard - ecoarmor:set_reaper_chestplate - - ecoarmor:upgrade_crystal_manyullyn + - nether_star - ecoarmor:set_reaper_leggings - prismarine_shard From b4bf2f0a08afbfc8cc6a2ff22348fdfba7307b26 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 11:06:47 +0000 Subject: [PATCH 09/35] Fixed /eagive slot-specific --- .../main/java/com/willfp/ecoarmor/commands/CommandEagive.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java index 293008c..bb5f28d 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java @@ -86,6 +86,8 @@ public class CommandEagive extends AbstractCommand { } else { reciever.getInventory().addItem(set.getItemStack(slot)); } + + return; } for (ArmorSlot slot : ArmorSlot.values()) { From 217f13cdb0c28fe521c3bfc1def24d9628eb2c82 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 11:46:47 +0000 Subject: [PATCH 10/35] Updated manyullyn --- build.gradle | 2 +- .../core-plugin/src/main/resources/sets.yml | 16 +++++++------- .../core-plugin/src/main/resources/tiers.yml | 22 ++++++++++++++++--- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/build.gradle b/build.gradle index f5afd41..a0a5e62 100644 --- a/build.gradle +++ b/build.gradle @@ -47,7 +47,7 @@ allprojects { } dependencies { - compileOnly 'com.willfp:eco:3.0.0' + compileOnly 'com.willfp:eco:3.0.2' compileOnly 'org.jetbrains:annotations:19.0.0' diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index 2854c3b..d3ee669 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -5,13 +5,13 @@ Reaper: damage-taken-multiplier: 0.9 advanced-lore: - "" - - "&6&lADVANCED BONUS" + - "<\$#f12711>&lADVANCED BONUS<\$#f5af19>" - "&8» &6Take 10% less damage" - "&8&oRequires full set to be worn" - advancement-shard-name: "&6Advancement Shard: &cReaper" + advancement-shard-name: "<\$#f12711>Advancement Shard:<\$#f5af19> &cReaper" advancement-shard-lore: - "&8Drop this onto &cReaper Armor" - - "&8to make it &6Advanced&8." + - "&8to make it <\$#f12711>Advanced<\$#f5af19>." shard-craftable: true shard-recipe: - prismarine_shard @@ -32,7 +32,7 @@ Reaper: material: leather_helmet leather-color: "#303030" name: "&cReaper Helmet" - advanced-name: "&cAdvanced Reaper Helmet" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Helmet" lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -59,7 +59,7 @@ Reaper: material: leather_chestplate leather-color: "#303030" name: "&cReaper Chestplate" - advanced-name: "&cAdvanced Reaper Chestplate" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Chestplate" lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -85,7 +85,7 @@ Reaper: unbreaking: 3 material: elytra name: "&cReaper Elytra" - advanced-name: "&cAdvanced Reaper Elytra" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Elytra" lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -112,7 +112,7 @@ Reaper: material: leather_leggings leather-color: "#303030" name: "&cReaper Leggings" - advanced-name: "&cAdvanced Reaper Leggings" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Leggings" lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -139,7 +139,7 @@ Reaper: material: leather_boots leather-color: "#303030" name: "&cReaper Boots" - advanced-name: "&cAdvanced Reaper Boots" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Boots" lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index 6f9a6c6..dac9c3a 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -37,6 +37,10 @@ iron: armor: 6 toughness: 0 knockback-resistance: 0 + elytra: + armor: 2 + toughness: 0 + knockback-resistance: 0 leggings: armor: 5 toughness: 0 @@ -76,6 +80,10 @@ diamond: armor: 8 toughness: 2 knockback-resistance: 0 + elytra: + armor: 3 + toughness: 0 + knockback-resistance: 0 leggings: armor: 6 toughness: 2 @@ -115,6 +123,10 @@ netherite: armor: 8 toughness: 3 knockback-resistance: 1 + elytra: + armor: 3 + toughness: 0 + knockback-resistance: 1 leggings: armor: 6 toughness: 3 @@ -125,10 +137,10 @@ netherite: knockback-resistance: 1 manyullyn: - display: "&5&k!!&r &d&lMANYULLYN&r &5&k!!&r" + display: "&d&k!!&r <\$#f953c6>&lMANYULLYN<\$#b91d73>&r &d&k!!&r" requires-tier: netherite # Set to 'none' to always allow application crystal-craftable: true - crystal-name: "&dManyullyn Upgrade Crystal" + crystal-name: "<\$#f953c6>Manyullyn Upgrade Crystal<\$#b91d73>" crystal-recipe: - ecoarmor:upgrade_crystal_netherite - enchanted_golden_apple @@ -144,7 +156,7 @@ manyullyn: crystal-lore: - "&8Drop this onto an armor piece" - "&8to set its tier to:" - - "&5&k!!&r &d&lMANYULLYN&r &5&k!!&r" + - "&d&k!!&r <\$#f953c6>&lMANYULLYN<\$#b91d73>&r &d&k!!&r" properties: helmet: armor: 3 @@ -154,6 +166,10 @@ manyullyn: armor: 8 toughness: 5 knockback-resistance: 2 + elytra: + armor: 3 + toughness: 0 + knockback-resistance: 2 leggings: armor: 6 toughness: 5 From 32319ce99a672c2c516147e6eeaf1362f5577348 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 12:02:36 +0000 Subject: [PATCH 11/35] Changed reaper set default recipe --- eco-core/core-plugin/src/main/resources/sets.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index d3ee669..62a1a4e 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -46,7 +46,7 @@ Reaper: - air - nether_star - - diamond_helmet + - netherite_helmet - nether_star - air @@ -66,14 +66,14 @@ Reaper: - "&8&oRequires full set to be worn" - "" - "&fTier: %tier%" - - "&8&oUpgrade with a Upgrade Crystal" + - "&8&oUpgrade with an Upgrade Crystal" recipe: - air - nether_star - air - nether_star - - diamond_chestplate + - netherite_chestplate - nether_star - air @@ -92,7 +92,7 @@ Reaper: - "&8&oRequires full set to be worn" - "" - "&fTier: %tier%" - - "&8&oUpgrade with a Upgrade Crystal" + - "&8&oUpgrade with an Upgrade Crystal" recipe: - air - nether_star @@ -119,14 +119,14 @@ Reaper: - "&8&oRequires full set to be worn" - "" - "&fTier: %tier%" - - "&8&oUpgrade with a Upgrade Crystal" + - "&8&oUpgrade with an Upgrade Crystal" recipe: - air - nether_star - air - nether_star - - diamond_leggings + - netherite_leggings - nether_star - air @@ -146,14 +146,14 @@ Reaper: - "&8&oRequires full set to be worn" - "" - "&fTier: %tier%" - - "&8&oUpgrade with a Upgrade Crystal" + - "&8&oUpgrade with an Upgrade Crystal" recipe: - air - nether_star - air - nether_star - - diamond_boots + - netherite_boots - nether_star - air From 055ea3e4f6dd88b2cd62817bc367d641d997d0d0 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 13:45:42 +0000 Subject: [PATCH 12/35] Added effective durability --- .../com/willfp/ecoarmor/EcoArmorPlugin.java | 4 +- .../com/willfp/ecoarmor/sets/ArmorSet.java | 1 + .../util/EffectiveDurabilityListener.java | 57 +++++++++++++++++++ .../upgrades/crystal/CrystalListener.java | 18 ++++++ .../core-plugin/src/main/resources/sets.yml | 5 ++ .../core-plugin/src/main/resources/tiers.yml | 8 +-- 6 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index fb6f3f7..c716692 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -14,6 +14,7 @@ import com.willfp.ecoarmor.display.packets.PacketSetSlot; import com.willfp.ecoarmor.display.packets.PacketWindowItems; import com.willfp.ecoarmor.effects.Effects; import com.willfp.ecoarmor.sets.ArmorSets; +import com.willfp.ecoarmor.sets.util.EffectiveDurabilityListener; import com.willfp.ecoarmor.upgrades.advanced.AdvancementShardListener; import com.willfp.ecoarmor.upgrades.crystal.CrystalListener; import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; @@ -128,7 +129,8 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { public List getListeners() { return Arrays.asList( new CrystalListener(this), - new AdvancementShardListener(this) + new AdvancementShardListener(this), + new EffectiveDurabilityListener(this) ); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java index 5b3466f..5ff4ca1 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java @@ -207,6 +207,7 @@ public class ArmorSet { PersistentDataContainer container = meta.getPersistentDataContainer(); container.set(PLUGIN.getNamespacedKeyFactory().create("set"), PersistentDataType.STRING, name); container.set(PLUGIN.getNamespacedKeyFactory().create("tier"), PersistentDataType.STRING, "default"); + container.set(PLUGIN.getNamespacedKeyFactory().create("effective-durability"), PersistentDataType.INTEGER, EcoArmorConfigs.SETS.getInt(name + "." + pieceName + ".effective-durability")); if (advanced) { container.set(PLUGIN.getNamespacedKeyFactory().create("advanced"), PersistentDataType.INTEGER, 1); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java new file mode 100644 index 0000000..f67002a --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java @@ -0,0 +1,57 @@ +package com.willfp.ecoarmor.sets.util; + +import com.willfp.eco.util.NumberUtils; +import com.willfp.eco.util.internal.PluginDependent; +import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemDamageEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; +import org.jetbrains.annotations.NotNull; + +public class EffectiveDurabilityListener extends PluginDependent implements Listener { + /** + * Create new effective durability listeners. + * + * @param plugin The plugin. + */ + public EffectiveDurabilityListener(@NotNull final AbstractEcoPlugin plugin) { + super(plugin); + } + + /** + * Make durability act as effective. + * + * @param event The event to listen for. + */ + @EventHandler + public void onDamage(@NotNull final PlayerItemDamageEvent event) { + ItemStack itemStack = event.getItem(); + ItemMeta meta = itemStack.getItemMeta(); + + if (meta == null) { + return; + } + + PersistentDataContainer container = meta.getPersistentDataContainer(); + + Integer effectiveDurability = container.get(this.getPlugin().getNamespacedKeyFactory().create("effective-durability"), PersistentDataType.INTEGER); + + if (effectiveDurability == null) { + return; + } + + int maxDurability = itemStack.getType().getMaxDurability(); + + double ratio = (double) effectiveDurability / maxDurability; + + double chance = 1 / ratio; + + if (NumberUtils.randFloat(0, 1) > chance) { + event.setCancelled(true); + } + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java index e38a519..17e827f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java @@ -7,6 +7,7 @@ import com.willfp.ecoarmor.sets.util.ArmorUtils; import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -69,4 +70,21 @@ public class CrystalListener extends PluginDependent implements Listener { event.setCancelled(true); } + + /** + * Prevents placing upgrade crystals. + * + * @param event The event to listen for. + */ + @EventHandler + public void onPlaceCrystal(@NotNull final BlockPlaceEvent event) { + ItemStack item = event.getItemInHand(); + if (item.getType() != Material.END_CRYSTAL) { + return; + } + + if (ArmorUtils.getCrystalTier(item) != null) { + event.setCancelled(true); + } + } } diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index 62a1a4e..4b237c2 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -33,6 +33,7 @@ Reaper: leather-color: "#303030" name: "&cReaper Helmet" advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Helmet" + effective-durability: 2048 lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -60,6 +61,7 @@ Reaper: leather-color: "#303030" name: "&cReaper Chestplate" advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Chestplate" + effective-durability: 2048 lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -86,6 +88,7 @@ Reaper: material: elytra name: "&cReaper Elytra" advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Elytra" + effective-durability: 2048 lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -113,6 +116,7 @@ Reaper: leather-color: "#303030" name: "&cReaper Leggings" advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Leggings" + effective-durability: 2048 lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" @@ -140,6 +144,7 @@ Reaper: leather-color: "#303030" name: "&cReaper Boots" advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Boots" + effective-durability: 2048 lore: - "&c&lREAPER SET BONUS" - "&8» &cDeal 25% more damage" diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index dac9c3a..f3a8ebd 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -100,15 +100,15 @@ netherite: crystal-name: "&cNetherite Upgrade Crystal" crystal-recipe: - air - - netherite_block + - netherite_ingot - air - - netherite_block + - netherite_ingot - ecoarmor:upgrade_crystal_diamond - - netherite_block + - netherite_ingot - air - - netherite_block + - netherite_ingot - air crystal-lore: - "&8Drop this onto an armor piece" From 4f949d76f0fa21695bcf52a9418ab54e9fa20d4e Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 17:55:38 +0000 Subject: [PATCH 13/35] Updated to new eco display system --- build.gradle | 2 +- .../com/willfp/ecoarmor/EcoArmorPlugin.java | 16 +++----- .../ecoarmor/display/packets/PacketChat.java | 40 ------------------- .../packets/PacketSetCreativeSlot.java | 26 ------------ .../display/packets/PacketSetSlot.java | 27 ------------- .../display/packets/PacketWindowItems.java | 33 --------------- 6 files changed, 7 insertions(+), 137 deletions(-) delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketChat.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketSetCreativeSlot.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketSetSlot.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketWindowItems.java diff --git a/build.gradle b/build.gradle index a0a5e62..11046e3 100644 --- a/build.gradle +++ b/build.gradle @@ -47,7 +47,7 @@ allprojects { } dependencies { - compileOnly 'com.willfp:eco:3.0.2' + compileOnly 'com.willfp:eco:3.1.0' compileOnly 'org.jetbrains:annotations:19.0.0' diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index c716692..e56073c 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -1,6 +1,8 @@ package com.willfp.ecoarmor; import com.willfp.eco.util.command.AbstractCommand; +import com.willfp.eco.util.display.Display; +import com.willfp.eco.util.display.DisplayModule; import com.willfp.eco.util.integrations.IntegrationLoader; import com.willfp.eco.util.plugin.AbstractEcoPlugin; import com.willfp.eco.util.protocollib.AbstractPacketAdapter; @@ -8,10 +10,7 @@ import com.willfp.ecoarmor.commands.CommandEagive; import com.willfp.ecoarmor.commands.CommandEareload; import com.willfp.ecoarmor.commands.TabcompleterEagive; import com.willfp.ecoarmor.config.EcoArmorConfigs; -import com.willfp.ecoarmor.display.packets.PacketChat; -import com.willfp.ecoarmor.display.packets.PacketSetCreativeSlot; -import com.willfp.ecoarmor.display.packets.PacketSetSlot; -import com.willfp.ecoarmor.display.packets.PacketWindowItems; +import com.willfp.ecoarmor.display.ArmorDisplay; import com.willfp.ecoarmor.effects.Effects; import com.willfp.ecoarmor.sets.ArmorSets; import com.willfp.ecoarmor.sets.util.EffectiveDurabilityListener; @@ -46,6 +45,8 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { */ @Override public void enable() { + Display.registerDisplayModule(new DisplayModule(ArmorDisplay::display, 1, this.getPluginName())); + Display.registerRevertModule(ArmorDisplay::revertDisplay); Effects.values().forEach(effect -> this.getEventManager().registerListener(effect)); this.onReload(); } @@ -112,12 +113,7 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { */ @Override public List getPacketAdapters() { - return Arrays.asList( - new PacketChat(this), - new PacketSetSlot(this), - new PacketSetCreativeSlot(this), - new PacketWindowItems(this) - ); + return new ArrayList<>(); } /** diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketChat.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketChat.java deleted file mode 100644 index 7750f5a..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketChat.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.willfp.ecoarmor.display.packets; - -import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.events.ListenerPriority; -import com.comphenix.protocol.events.PacketContainer; -import com.comphenix.protocol.wrappers.WrappedChatComponent; -import com.willfp.eco.util.plugin.AbstractEcoPlugin; -import com.willfp.eco.util.protocollib.AbstractPacketAdapter; -import com.willfp.ecoarmor.proxy.proxies.ChatComponentProxy; -import com.willfp.ecoarmor.util.ProxyUtils; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PacketChat extends AbstractPacketAdapter { - /** - * Instantiate a new listener for {@link PacketType.Play.Server#CHAT}. - * - * @param plugin The plugin to listen through. - */ - public PacketChat(@NotNull final AbstractEcoPlugin plugin) { - super(plugin, PacketType.Play.Server.CHAT, ListenerPriority.NORMAL, true); - } - - @Override - public void onSend(@NotNull final PacketContainer packet, - @NotNull final Player player) { - for (int i = 0; i < packet.getChatComponents().size(); i++) { - WrappedChatComponent component = packet.getChatComponents().read(i); - if (component == null) { - continue; - } - - if (component.getHandle() == null) { - return; - } - WrappedChatComponent newComponent = WrappedChatComponent.fromHandle(ProxyUtils.getProxy(ChatComponentProxy.class).modifyComponent(component.getHandle())); - packet.getChatComponents().write(i, newComponent); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketSetCreativeSlot.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketSetCreativeSlot.java deleted file mode 100644 index 32ef410..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketSetCreativeSlot.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.willfp.ecoarmor.display.packets; - -import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.events.PacketContainer; -import com.willfp.eco.util.plugin.AbstractEcoPlugin; -import com.willfp.eco.util.protocollib.AbstractPacketAdapter; -import com.willfp.ecoarmor.display.ArmorDisplay; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PacketSetCreativeSlot extends AbstractPacketAdapter { - /** - * Instantiate a new listener for {@link PacketType.Play.Client#SET_CREATIVE_SLOT}. - * - * @param plugin The plugin to listen through. - */ - public PacketSetCreativeSlot(@NotNull final AbstractEcoPlugin plugin) { - super(plugin, PacketType.Play.Client.ITEM_NAME, false); - } - - @Override - public void onReceive(@NotNull final PacketContainer packet, - @NotNull final Player player) { - packet.getItemModifier().modify(0, ArmorDisplay::revertDisplay); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketSetSlot.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketSetSlot.java deleted file mode 100644 index e25aae7..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketSetSlot.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.willfp.ecoarmor.display.packets; - -import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.events.ListenerPriority; -import com.comphenix.protocol.events.PacketContainer; -import com.willfp.eco.util.plugin.AbstractEcoPlugin; -import com.willfp.eco.util.protocollib.AbstractPacketAdapter; -import com.willfp.ecoarmor.display.ArmorDisplay; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PacketSetSlot extends AbstractPacketAdapter { - /** - * Instantiate a new listener for {@link PacketType.Play.Server#SET_SLOT}. - * - * @param plugin The plugin to listen through. - */ - public PacketSetSlot(@NotNull final AbstractEcoPlugin plugin) { - super(plugin, PacketType.Play.Server.SET_SLOT, ListenerPriority.NORMAL, false); - } - - @Override - public void onSend(@NotNull final PacketContainer packet, - @NotNull final Player player) { - packet.getItemModifier().modify(0, ArmorDisplay::display); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketWindowItems.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketWindowItems.java deleted file mode 100644 index 17c3fa5..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/packets/PacketWindowItems.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.willfp.ecoarmor.display.packets; - -import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.events.ListenerPriority; -import com.comphenix.protocol.events.PacketContainer; -import com.willfp.eco.util.plugin.AbstractEcoPlugin; -import com.willfp.eco.util.protocollib.AbstractPacketAdapter; -import com.willfp.ecoarmor.display.ArmorDisplay; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class PacketWindowItems extends AbstractPacketAdapter { - /** - * Instantiate a new listener for {@link PacketType.Play.Server#WINDOW_ITEMS}. - * - * @param plugin The plugin to listen through. - */ - public PacketWindowItems(@NotNull final AbstractEcoPlugin plugin) { - super(plugin, PacketType.Play.Server.WINDOW_ITEMS, ListenerPriority.NORMAL, false); - } - - @Override - public void onSend(@NotNull final PacketContainer packet, - @NotNull final Player player) { - packet.getItemListModifier().modify(0, itemStacks -> { - if (itemStacks == null) { - return null; - } - itemStacks.forEach(ArmorDisplay::display); - return itemStacks; - }); - } -} From 02679371ac0eadf541a08d4433fad9c49994b917 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 19 Jan 2021 19:46:43 +0000 Subject: [PATCH 14/35] Removed protection on elytra in reaper set --- eco-core/core-plugin/src/main/resources/sets.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index 4b237c2..5f90281 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -83,7 +83,6 @@ Reaper: - air elytra: enchants: - protection: 4 unbreaking: 3 material: elytra name: "&cReaper Elytra" From e6c7c77eaa0d3c5d4b45b577fba3d0bbd93d6bbb Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 09:57:55 +0000 Subject: [PATCH 15/35] Added flight and hunger loss multiplier effects --- .../com/willfp/ecoarmor/EcoArmorPlugin.java | 6 ++- .../com/willfp/ecoarmor/effects/Effect.java | 14 +++++ .../com/willfp/ecoarmor/effects/Effects.java | 4 ++ .../effects/AttackSpeedMultiplier.java | 2 +- .../ecoarmor/effects/effects/BonusHearts.java | 2 +- .../effects/effects/BowDamageMultiplier.java | 2 +- .../effects/effects/DamageMultiplier.java | 2 +- .../effects/DamageTakenMultiplier.java | 2 +- .../effects/effects/DurabilityMultiplier.java | 2 +- .../ecoarmor/effects/effects/EvadeChance.java | 2 +- .../effects/effects/FallDamageMultiplier.java | 2 +- .../ecoarmor/effects/effects/Flight.java | 33 ++++++++++++ .../effects/effects/HungerLossMultiplier.java | 44 ++++++++++++++++ .../effects/MeleeDamageMultiplier.java | 2 +- .../effects/RegenerationMultiplier.java | 2 +- .../effects/effects/SpeedMutiplier.java | 2 +- .../effects/TridentDamageMultiplier.java | 2 +- .../ecoarmor/effects/effects/WarpChance.java | 2 +- .../util/EffectiveDurabilityListener.java | 2 +- .../core-plugin/src/main/resources/config.yml | 52 +++++++++++++++++++ 20 files changed, 166 insertions(+), 15 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/Flight.java create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/HungerLossMultiplier.java diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index e56073c..d3e1d9a 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -11,6 +11,7 @@ import com.willfp.ecoarmor.commands.CommandEareload; import com.willfp.ecoarmor.commands.TabcompleterEagive; import com.willfp.ecoarmor.config.EcoArmorConfigs; import com.willfp.ecoarmor.display.ArmorDisplay; +import com.willfp.ecoarmor.effects.Effect; import com.willfp.ecoarmor.effects.Effects; import com.willfp.ecoarmor.sets.ArmorSets; import com.willfp.ecoarmor.sets.util.EffectiveDurabilityListener; @@ -47,7 +48,8 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { public void enable() { Display.registerDisplayModule(new DisplayModule(ArmorDisplay::display, 1, this.getPluginName())); Display.registerRevertModule(ArmorDisplay::revertDisplay); - Effects.values().forEach(effect -> this.getEventManager().registerListener(effect)); + Effects.values().stream().filter(Effect::isEnabled).forEach(effect -> this.getEventManager().registerListener(effect)); + ArmorSets.update(); this.onReload(); } @@ -72,6 +74,8 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { */ @Override public void onReload() { + Effects.values().forEach(effect -> this.getEventManager().unregisterListener(effect)); + Effects.values().stream().filter(Effect::isEnabled).forEach(effect -> this.getEventManager().registerListener(effect)); this.getLog().info(ArmorSets.values().size() + " Sets Loaded"); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java index 87f15e6..3fbf9fc 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java @@ -19,6 +19,12 @@ public abstract class Effect implements Listener { @Getter private final String name; + /** + * If the effect is enabled. + */ + @Getter + private boolean enabled; + /** * Create a new effect. * @@ -27,6 +33,14 @@ public abstract class Effect implements Listener { protected Effect(@NotNull final String name) { this.name = name; + update(); Effects.addNewEffect(this); } + + /** + * Update if the effect is enabled. + */ + public void update() { + enabled = this.getPlugin().getConfigYml().getBool("effects." + name + ".enabled"); + } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java index 91cd685..f5dc636 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java @@ -11,6 +11,8 @@ import com.willfp.ecoarmor.effects.effects.DamageTakenMultiplier; import com.willfp.ecoarmor.effects.effects.EvadeChance; import com.willfp.ecoarmor.effects.effects.ExperienceMultiplier; import com.willfp.ecoarmor.effects.effects.FallDamageMultiplier; +import com.willfp.ecoarmor.effects.effects.Flight; +import com.willfp.ecoarmor.effects.effects.HungerLossMultiplier; import com.willfp.ecoarmor.effects.effects.MeleeDamageMultiplier; import com.willfp.ecoarmor.effects.effects.RegenerationMultiplier; import com.willfp.ecoarmor.effects.effects.SpeedMutiplier; @@ -42,6 +44,8 @@ public class Effects { public static final Effect REGENERATION_MULTIPLIER = new RegenerationMultiplier(); public static final Effect WARP_CHANCE = new WarpChance(); public static final Effect ATTACK_SPEED_MULTIPLIER = new AttackSpeedMultiplier(); + public static final Effect FLIGHT = new Flight(); + public static final Effect HUNGER_LOSS_MULTIPLIER = new HungerLossMultiplier(); /** * Get effect matching name. diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java index 071f932..fd5f8ff 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java @@ -20,7 +20,7 @@ public class AttackSpeedMultiplier extends Effect { } @EventHandler - public void onArmorEquip(@NotNull final ArmorEquipEvent event) { + public void listener(@NotNull final ArmorEquipEvent event) { Player player = event.getPlayer(); AttributeInstance movementSpeed = player.getAttribute(Attribute.GENERIC_ATTACK_SPEED); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java index 46b55ac..a9050ec 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java @@ -20,7 +20,7 @@ public class BonusHearts extends Effect { } @EventHandler - public void onArmorEquip(@NotNull final ArmorEquipEvent event) { + public void listener(@NotNull final ArmorEquipEvent event) { Player player = event.getPlayer(); AttributeInstance maxHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java index b02c5c5..e94449b 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java @@ -16,7 +16,7 @@ public class BowDamageMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageByEntityEvent event) { + public void listener(@NotNull final EntityDamageByEntityEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java index fbb5a49..c7398f1 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java @@ -15,7 +15,7 @@ public class DamageMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageByEntityEvent event) { + public void listener(@NotNull final EntityDamageByEntityEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java index 3121b17..fb05621 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java @@ -13,7 +13,7 @@ public class DamageTakenMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageEvent event) { + public void listener(@NotNull final EntityDamageEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java index 6d0b5e8..53fa4fd 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java @@ -14,7 +14,7 @@ public class DurabilityMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final PlayerItemDamageEvent event) { + public void listener(@NotNull final PlayerItemDamageEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java index 7692c1a..86fdb93 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java @@ -14,7 +14,7 @@ public class EvadeChance extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageEvent event) { + public void listener(@NotNull final EntityDamageEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java index 9d0e2ce..21b7dee 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java @@ -13,7 +13,7 @@ public class FallDamageMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageEvent event) { + public void listener(@NotNull final EntityDamageEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/Flight.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/Flight.java new file mode 100644 index 0000000..0a27a89 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/Flight.java @@ -0,0 +1,33 @@ +package com.willfp.ecoarmor.effects.effects; + +import com.willfp.eco.util.events.armorequip.ArmorEquipEvent; +import com.willfp.ecoarmor.effects.Effect; +import com.willfp.ecoarmor.sets.util.ArmorUtils; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.jetbrains.annotations.NotNull; + +public class Flight extends Effect { + public Flight() { + super("flight"); + } + + @EventHandler + public void onArmorEquip(@NotNull final ArmorEquipEvent event) { + Player player = event.getPlayer(); + + this.getPlugin().getScheduler().runLater(() -> { + Boolean flight = ArmorUtils.getEffectStrength(player, this); + if (flight == null) { + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { + player.setAllowFlight(false); + } + } else { + if (flight) { + player.setAllowFlight(true); + } + } + }, 1); + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/HungerLossMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/HungerLossMultiplier.java new file mode 100644 index 0000000..a83f6f6 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/HungerLossMultiplier.java @@ -0,0 +1,44 @@ +package com.willfp.ecoarmor.effects.effects; + +import com.willfp.eco.util.NumberUtils; +import com.willfp.ecoarmor.effects.Effect; +import com.willfp.ecoarmor.sets.util.ArmorUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.jetbrains.annotations.NotNull; + +public class HungerLossMultiplier extends Effect { + public HungerLossMultiplier() { + super("hunger-loss-multiplier"); + } + + @EventHandler + public void listener(@NotNull final FoodLevelChangeEvent event) { + if (!(event.getEntity() instanceof Player)) { + return; + } + + Player player = (Player) event.getEntity(); + + Double multiplier = ArmorUtils.getEffectStrength(player, this); + + if (multiplier == null) { + return; + } + + if (event.getFoodLevel() > player.getFoodLevel()) { + return; + } + + if (multiplier < 1) { + if (NumberUtils.randFloat(0, 1) > multiplier) { + event.setCancelled(true); + } + } else { + int difference = player.getFoodLevel() - event.getFoodLevel(); + difference = (int) Math.ceil(difference * multiplier); + event.setFoodLevel(player.getFoodLevel() - difference); + } + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java index d5c850e..a539e90 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java @@ -13,7 +13,7 @@ public class MeleeDamageMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageByEntityEvent event) { + public void listener(@NotNull final EntityDamageByEntityEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java index 7945904..c65ca66 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java @@ -13,7 +13,7 @@ public class RegenerationMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityRegainHealthEvent event) { + public void listener(@NotNull final EntityRegainHealthEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java index d57a09a..89c1923 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java @@ -20,7 +20,7 @@ public class SpeedMutiplier extends Effect { } @EventHandler - public void onArmorEquip(@NotNull final ArmorEquipEvent event) { + public void listener(@NotNull final ArmorEquipEvent event) { Player player = event.getPlayer(); AttributeInstance movementSpeed = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java index f54ff47..fb3c8dd 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java @@ -16,7 +16,7 @@ public class TridentDamageMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageByEntityEvent event) { + public void listener(@NotNull final EntityDamageByEntityEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java index 796de22..e637573 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java @@ -18,7 +18,7 @@ public class WarpChance extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageByEntityEvent event) { + public void listener(@NotNull final EntityDamageByEntityEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java index f67002a..e0394a0 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java @@ -28,7 +28,7 @@ public class EffectiveDurabilityListener extends PluginDependent implements List * @param event The event to listen for. */ @EventHandler - public void onDamage(@NotNull final PlayerItemDamageEvent event) { + public void listener(@NotNull final PlayerItemDamageEvent event) { ItemStack itemStack = event.getItem(); ItemMeta meta = itemStack.getItemMeta(); diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index bed8fd8..73aa5b9 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -2,3 +2,55 @@ # EcoArmor # by Auxilor # + + +# Effects are passive abilities that happen when wearing a full set with the effect present. +effects: + attack-speed-multiplier: + # Changes attack speed by some multiplier + enabled: true + bonus-hearts: + # Extra hearts given to a player + enabled: true + bow-damage-multipier: + # Changes bow damage by some multiplier + enabled: true + damage-multipier: + # Changes damage from any form by some multiplier + enabled: true + damage-taken-multipier: + # Changes incoming damage by some multiplier + enabled: true + durability-multiplier: + # Changes durability for **all items in inventory** by some multiplier + enabled: true + evade-chance: + # Chance of avoiding attack, as a percentage + enabled: true + experience-multiplier: + # Changes experience gained by some multiplier + enabled: true + fall-damage-multiplier: + # Changes fall damage by some multiplier + enabled: true + flight: + # Allows flight + enabled: true + melee-damage-multiplier: + # Changes melee damage by some multiplier + enabled: true + regeneration-multiplier: + # Changes regeneration by some multiplier + enabled: true + speed-multiplier: + # Changes movement speed by some multiplier + enabled: true + trident-damage-multiplier: + # Changes trident damage by some multiplier + enabled: true + warp-chance: + # Chance to warp behind your opponent after damaging them, as a percentage + enabled: true + hunger-loss-multiplier: + # Modify hunger loss by some multiplier + enabled: true \ No newline at end of file From c296b339c7739eee674b1cf22d033bf1d51f4a7a Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 10:39:18 +0000 Subject: [PATCH 16/35] Added miner armor --- .../com/willfp/ecoarmor/EcoArmorPlugin.java | 2 + .../com/willfp/ecoarmor/sets/ArmorSet.java | 22 +++ .../sets/util/PotionEffectListener.java | 55 ++++++ .../core-plugin/src/main/resources/sets.yml | 178 +++++++++++++++++- 4 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/PotionEffectListener.java diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index d3e1d9a..297775a 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -15,6 +15,7 @@ import com.willfp.ecoarmor.effects.Effect; import com.willfp.ecoarmor.effects.Effects; import com.willfp.ecoarmor.sets.ArmorSets; import com.willfp.ecoarmor.sets.util.EffectiveDurabilityListener; +import com.willfp.ecoarmor.sets.util.PotionEffectListener; import com.willfp.ecoarmor.upgrades.advanced.AdvancementShardListener; import com.willfp.ecoarmor.upgrades.crystal.CrystalListener; import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; @@ -130,6 +131,7 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { return Arrays.asList( new CrystalListener(this), new AdvancementShardListener(this), + new PotionEffectListener(this), new EffectiveDurabilityListener(this) ); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java index 5ff4ca1..f76b3c1 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java @@ -65,6 +65,12 @@ public class ArmorSet { @Getter private final Map potionEffects = new HashMap<>(); + /** + * Potion effects to be applied on equipping advanced. + */ + @Getter + private final Map advancedPotionEffects = new HashMap<>(); + /** * Items in set. */ @@ -101,6 +107,22 @@ public class ArmorSet { advancedEffects.put(effect, value); } + if (EcoArmorConfigs.SETS.getConfig().getConfigurationSection(name + ".potion-effects") != null) { + for (String effectName : EcoArmorConfigs.SETS.getConfig().getConfigurationSection(name + ".potion-effects").getKeys(false)) { + PotionEffectType type = PotionEffectType.getByName(effectName.toUpperCase()); + int strength = EcoArmorConfigs.SETS.getInt(name + ".potion-effects." + effectName); + potionEffects.put(type, strength); + } + } + + if (EcoArmorConfigs.SETS.getConfig().getConfigurationSection(name + ".advanced-potion-effects") != null) { + for (String effectName : EcoArmorConfigs.SETS.getConfig().getConfigurationSection(name + ".advanced-potion-effects").getKeys(false)) { + PotionEffectType type = PotionEffectType.getByName(effectName.toUpperCase()); + int strength = EcoArmorConfigs.SETS.getInt(name + ".advanced-potion-effects." + effectName); + advancedPotionEffects.put(type, strength); + } + } + for (ArmorSlot slot : ArmorSlot.values()) { ItemStack item = construct(slot.name().toLowerCase(), false); items.put(slot, item); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/PotionEffectListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/PotionEffectListener.java new file mode 100644 index 0000000..a09553b --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/PotionEffectListener.java @@ -0,0 +1,55 @@ +package com.willfp.ecoarmor.sets.util; + +import com.willfp.eco.util.events.armorequip.ArmorEquipEvent; +import com.willfp.eco.util.internal.PluginDependent; +import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import com.willfp.ecoarmor.sets.ArmorSet; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.potion.PotionEffect; +import org.jetbrains.annotations.NotNull; + +public class PotionEffectListener extends PluginDependent implements Listener { + /** + * Create new potion effect listener for set effects. + * + * @param plugin EcoArmor. + */ + public PotionEffectListener(@NotNull final AbstractEcoPlugin plugin) { + super(plugin); + } + + /** + * Apply set potion effects. + * + * @param event The event to listen for. + */ + @EventHandler + public void onEquip(@NotNull final ArmorEquipEvent event) { + final Player player = event.getPlayer(); + + this.getPlugin().getScheduler().runLater(() -> { + for (PotionEffect effect : player.getActivePotionEffects()) { + if (effect.getDuration() >= 500000000) { + player.removePotionEffect(effect.getType()); + } + } + + ArmorSet set = ArmorUtils.getSetOnPlayer(player); + if (set == null) { + return; + } + + set.getPotionEffects().forEach((potionEffectType, integer) -> { + player.addPotionEffect(new PotionEffect(potionEffectType, 0x6fffffff, integer - 1, false, false, true)); + }); + + if (ArmorUtils.isAdvanced(player)) { + set.getAdvancedPotionEffects().forEach((potionEffectType, integer) -> { + player.addPotionEffect(new PotionEffect(potionEffectType, 0x6fffffff, integer - 1, false, false, true)); + }); + } + }, 1); + } +} diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index 5f90281..40c8bef 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -1,4 +1,180 @@ -Reaper: +miner: + set-bonus: + experience-multiplier: 1.25 + advanced-set-bonus: + hunger-loss-multiplier: 0.5 + potion-effects: + haste: 2 + advanced-potion-effects: + haste: 3 + advanced-lore: + - "" + - "<\$#f12711>&lADVANCED BONUS<\$#f5af19>" + - "&8» &6Lose 50% less hunger" + - "&8» &6Permanent Haste III" + - "&8&oRequires full set to be worn" + advancement-shard-name: "<\$#f12711>Advancement Shard:<\$#f5af19> &9Miner" + advancement-shard-lore: + - "&8Drop this onto &9Miner Armor" + - "&8to make it <\$#f12711>Advanced<\$#f5af19>." + shard-craftable: true + shard-recipe: + - prismarine_shard + - ecoarmor:set_miner_helmet + - prismarine_shard + + - ecoarmor:set_miner_chestplate + - nether_star + - ecoarmor:set_miner_leggings + + - prismarine_shard + - ecoarmor:set_miner_boots + - prismarine_shard + helmet: + enchants: + fire_protection: 4 + unbreaking: 1 + material: leather_helmet + leather-color: "#6699cc" + name: "&9Miner Helmet" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Helmet" + effective-durability: 1024 + lore: + - "&9&lMINER SET BONUS" + - "&8» &9Gain 50% more experience" + - "&8» &9Permanent Haste II" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - diamond_pickaxe + - air + + - diamond_pickaxe + - diamond_helmet + - diamond_pickaxe + + - air + - diamond_pickaxe + - air + chestplate: + enchants: + fire_protection: 4 + unbreaking: 1 + material: leather_chestplate + leather-color: "#6699cc" + name: "&9Miner Chestplate" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Chestplate" + effective-durability: 1024 + lore: + - "&9&lMINER SET BONUS" + - "&8» &9Gain 50% more experience" + - "&8» &9Permanent Haste II" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - diamond_pickaxe + - air + + - diamond_pickaxe + - diamond_chestplate + - diamond_pickaxe + + - air + - diamond_pickaxe + - air + elytra: + enchants: + unbreaking: 1 + material: elytra + name: "&9Miner Elytra" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Elytra" + effective-durability: 1024 + lore: + - "&9&lMINER SET BONUS" + - "&8» &9Gain 50% more experience" + - "&8» &9Permanent Haste II" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - diamond_pickaxe + - air + + - diamond_pickaxe + - elytra + - diamond_pickaxe + + - air + - diamond_pickaxe + - air + leggings: + enchants: + fire_protection: 4 + unbreaking: 1 + material: leather_leggings + leather-color: "#6699cc" + name: "&9Miner Leggings" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Leggings" + effective-durability: 1024 + lore: + - "&9&lMINER SET BONUS" + - "&8» &9Gain 50% more experience" + - "&8» &9Permanent Haste II" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - diamond_pickaxe + - air + + - diamond_pickaxe + - diamond_leggings + - diamond_pickaxe + + - air + - diamond_pickaxe + - air + boots: + enchants: + fire_protection: 4 + unbreaking: 1 + material: leather_boots + leather-color: "#6699cc" + name: "&9Miner Boots" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Boots" + effective-durability: 1024 + lore: + - "&9&lMINER SET BONUS" + - "&8» &9Gain 50% more experience" + - "&8» &9Permanent Haste II" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - diamond_pickaxe + - air + + - diamond_pickaxe + - diamond_boots + - diamond_pickaxe + + - air + - diamond_pickaxe + - air + +reaper: set-bonus: damage-multiplier: 1.25 advanced-set-bonus: From 17709b6280ac1ab9cc976ed589e5671a936ee63e Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 10:53:37 +0000 Subject: [PATCH 17/35] Removed chat component proxies --- .../proxy/v1_16_R1/ChatComponent.java | 104 ------------------ .../proxy/v1_16_R2/ChatComponent.java | 104 ------------------ .../proxy/v1_16_R3/ChatComponent.java | 104 ------------------ .../core-plugin/src/main/resources/sets.yml | 4 +- .../proxy/proxies/ChatComponentProxy.java | 14 --- 5 files changed, 2 insertions(+), 328 deletions(-) delete mode 100644 eco-core/core-nms/v1_16_R1/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R1/ChatComponent.java delete mode 100644 eco-core/core-nms/v1_16_R2/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R2/ChatComponent.java delete mode 100644 eco-core/core-nms/v1_16_R3/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R3/ChatComponent.java delete mode 100644 eco-core/core-proxy/src/main/java/com/willfp/ecoarmor/proxy/proxies/ChatComponentProxy.java diff --git a/eco-core/core-nms/v1_16_R1/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R1/ChatComponent.java b/eco-core/core-nms/v1_16_R1/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R1/ChatComponent.java deleted file mode 100644 index 5cfaf4a..0000000 --- a/eco-core/core-nms/v1_16_R1/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R1/ChatComponent.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.willfp.ecoarmor.proxy.v1_16_R1; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.willfp.ecoarmor.display.ArmorDisplay; -import com.willfp.ecoarmor.proxy.proxies.ChatComponentProxy; -import net.minecraft.server.v1_16_R1.ChatBaseComponent; -import net.minecraft.server.v1_16_R1.ChatHoverable; -import net.minecraft.server.v1_16_R1.ChatMessage; -import net.minecraft.server.v1_16_R1.ChatModifier; -import net.minecraft.server.v1_16_R1.IChatBaseComponent; -import net.minecraft.server.v1_16_R1.MojangsonParser; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; - -public final class ChatComponent implements ChatComponentProxy { - @Override - public Object modifyComponent(@NotNull final Object object) { - if (!(object instanceof IChatBaseComponent)) { - return object; - } - - IChatBaseComponent chatComponent = (IChatBaseComponent) object; - chatComponent.stream().forEach(this::modifyBaseComponent); - - return chatComponent; - } - - private void modifyBaseComponent(@NotNull final IChatBaseComponent component) { - component.getSiblings().forEach(this::modifyBaseComponent); - if (component instanceof ChatMessage) { - Arrays.stream(((ChatMessage) component).getArgs()) - .filter(o -> o instanceof IChatBaseComponent) - .map(o -> (IChatBaseComponent) o) - .forEach(this::modifyBaseComponent); - } - - ChatHoverable hoverable = component.getChatModifier().getHoverEvent(); - - if (hoverable == null) { - return; - } - - JsonObject jsonObject = hoverable.b(); - JsonElement json = hoverable.b().get("contents"); - if (json.getAsJsonObject().get("id") == null) { - return; - } - if (json.getAsJsonObject().get("tag") == null) { - return; - } - String id = json.getAsJsonObject().get("id").toString(); - String tag = json.getAsJsonObject().get("tag").toString(); - ItemStack itemStack = getFromTag(tag, id); - - itemStack = ArmorDisplay.display(itemStack); - - json.getAsJsonObject().remove("tag"); - String newTag = toJson(itemStack); - json.getAsJsonObject().add("tag", new JsonPrimitive(newTag)); - - jsonObject.remove("contents"); - jsonObject.add("contents", json); - ChatHoverable newHoverable = ChatHoverable.a(jsonObject); - ChatModifier modifier = component.getChatModifier(); - modifier = modifier.setChatHoverable(newHoverable); - - ((ChatBaseComponent) component).setChatModifier(modifier); - } - - private static ItemStack getFromTag(@NotNull final String jsonTag, - @NotNull final String id) { - String processedId = id; - String processedJsonTag = jsonTag; - processedId = processedId.replace("minecraft:", ""); - processedId = processedId.toUpperCase(); - processedId = processedId.replace("\"", ""); - processedJsonTag = processedJsonTag.substring(1, processedJsonTag.length() - 1); - processedJsonTag = processedJsonTag.replace("id:", "\"id\":"); - processedJsonTag = processedJsonTag.replace("\\", ""); - Material material = Material.getMaterial(processedId); - - assert material != null; - ItemStack itemStack = new ItemStack(material); - net.minecraft.server.v1_16_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); - - try { - nmsStack.setTag(MojangsonParser.parse(processedJsonTag)); - } catch (CommandSyntaxException e) { - e.printStackTrace(); - } - return CraftItemStack.asBukkitCopy(nmsStack); - } - - private static String toJson(@NotNull final ItemStack itemStack) { - return CraftItemStack.asNMSCopy(itemStack).getOrCreateTag().toString(); - } -} diff --git a/eco-core/core-nms/v1_16_R2/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R2/ChatComponent.java b/eco-core/core-nms/v1_16_R2/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R2/ChatComponent.java deleted file mode 100644 index 1802958..0000000 --- a/eco-core/core-nms/v1_16_R2/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R2/ChatComponent.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.willfp.ecoarmor.proxy.v1_16_R2; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.willfp.ecoarmor.display.ArmorDisplay; -import com.willfp.ecoarmor.proxy.proxies.ChatComponentProxy; -import net.minecraft.server.v1_16_R2.ChatBaseComponent; -import net.minecraft.server.v1_16_R2.ChatHoverable; -import net.minecraft.server.v1_16_R2.ChatMessage; -import net.minecraft.server.v1_16_R2.ChatModifier; -import net.minecraft.server.v1_16_R2.IChatBaseComponent; -import net.minecraft.server.v1_16_R2.MojangsonParser; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; - -public final class ChatComponent implements ChatComponentProxy { - @Override - public Object modifyComponent(@NotNull final Object object) { - if (!(object instanceof IChatBaseComponent)) { - return object; - } - - IChatBaseComponent chatComponent = (IChatBaseComponent) object; - chatComponent.stream().forEach(this::modifyBaseComponent); - - return chatComponent; - } - - private void modifyBaseComponent(@NotNull final IChatBaseComponent component) { - component.getSiblings().forEach(this::modifyBaseComponent); - if (component instanceof ChatMessage) { - Arrays.stream(((ChatMessage) component).getArgs()) - .filter(o -> o instanceof IChatBaseComponent) - .map(o -> (IChatBaseComponent) o) - .forEach(this::modifyBaseComponent); - } - - ChatHoverable hoverable = component.getChatModifier().getHoverEvent(); - - if (hoverable == null) { - return; - } - - JsonObject jsonObject = hoverable.b(); - JsonElement json = hoverable.b().get("contents"); - if (json.getAsJsonObject().get("id") == null) { - return; - } - if (json.getAsJsonObject().get("tag") == null) { - return; - } - String id = json.getAsJsonObject().get("id").toString(); - String tag = json.getAsJsonObject().get("tag").toString(); - ItemStack itemStack = getFromTag(tag, id); - - itemStack = ArmorDisplay.display(itemStack); - - json.getAsJsonObject().remove("tag"); - String newTag = toJson(itemStack); - json.getAsJsonObject().add("tag", new JsonPrimitive(newTag)); - - jsonObject.remove("contents"); - jsonObject.add("contents", json); - ChatHoverable newHoverable = ChatHoverable.a(jsonObject); - ChatModifier modifier = component.getChatModifier(); - modifier = modifier.setChatHoverable(newHoverable); - - ((ChatBaseComponent) component).setChatModifier(modifier); - } - - private static ItemStack getFromTag(@NotNull final String jsonTag, - @NotNull final String id) { - String processedId = id; - String processedJsonTag = jsonTag; - processedId = processedId.replace("minecraft:", ""); - processedId = processedId.toUpperCase(); - processedId = processedId.replace("\"", ""); - processedJsonTag = processedJsonTag.substring(1, processedJsonTag.length() - 1); - processedJsonTag = processedJsonTag.replace("id:", "\"id\":"); - processedJsonTag = processedJsonTag.replace("\\", ""); - Material material = Material.getMaterial(processedId); - - assert material != null; - ItemStack itemStack = new ItemStack(material); - net.minecraft.server.v1_16_R2.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); - - try { - nmsStack.setTag(MojangsonParser.parse(processedJsonTag)); - } catch (CommandSyntaxException e) { - e.printStackTrace(); - } - return CraftItemStack.asBukkitCopy(nmsStack); - } - - private static String toJson(@NotNull final ItemStack itemStack) { - return CraftItemStack.asNMSCopy(itemStack).getOrCreateTag().toString(); - } -} diff --git a/eco-core/core-nms/v1_16_R3/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R3/ChatComponent.java b/eco-core/core-nms/v1_16_R3/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R3/ChatComponent.java deleted file mode 100644 index 45acbd1..0000000 --- a/eco-core/core-nms/v1_16_R3/src/main/java/com/willfp/ecoarmor/proxy/v1_16_R3/ChatComponent.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.willfp.ecoarmor.proxy.v1_16_R3; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.willfp.ecoarmor.display.ArmorDisplay; -import com.willfp.ecoarmor.proxy.proxies.ChatComponentProxy; -import net.minecraft.server.v1_16_R3.ChatBaseComponent; -import net.minecraft.server.v1_16_R3.ChatHoverable; -import net.minecraft.server.v1_16_R3.ChatMessage; -import net.minecraft.server.v1_16_R3.ChatModifier; -import net.minecraft.server.v1_16_R3.IChatBaseComponent; -import net.minecraft.server.v1_16_R3.MojangsonParser; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; - -public final class ChatComponent implements ChatComponentProxy { - @Override - public Object modifyComponent(@NotNull final Object object) { - if (!(object instanceof IChatBaseComponent)) { - return object; - } - - IChatBaseComponent chatComponent = (IChatBaseComponent) object; - chatComponent.stream().forEach(this::modifyBaseComponent); - - return chatComponent; - } - - private void modifyBaseComponent(@NotNull final IChatBaseComponent component) { - component.getSiblings().forEach(this::modifyBaseComponent); - if (component instanceof ChatMessage) { - Arrays.stream(((ChatMessage) component).getArgs()) - .filter(o -> o instanceof IChatBaseComponent) - .map(o -> (IChatBaseComponent) o) - .forEach(this::modifyBaseComponent); - } - - ChatHoverable hoverable = component.getChatModifier().getHoverEvent(); - - if (hoverable == null) { - return; - } - - JsonObject jsonObject = hoverable.b(); - JsonElement json = hoverable.b().get("contents"); - if (json.getAsJsonObject().get("id") == null) { - return; - } - if (json.getAsJsonObject().get("tag") == null) { - return; - } - String id = json.getAsJsonObject().get("id").toString(); - String tag = json.getAsJsonObject().get("tag").toString(); - ItemStack itemStack = getFromTag(tag, id); - - itemStack = ArmorDisplay.display(itemStack); - - json.getAsJsonObject().remove("tag"); - String newTag = toJson(itemStack); - json.getAsJsonObject().add("tag", new JsonPrimitive(newTag)); - - jsonObject.remove("contents"); - jsonObject.add("contents", json); - ChatHoverable newHoverable = ChatHoverable.a(jsonObject); - ChatModifier modifier = component.getChatModifier(); - modifier = modifier.setChatHoverable(newHoverable); - - ((ChatBaseComponent) component).setChatModifier(modifier); - } - - private static ItemStack getFromTag(@NotNull final String jsonTag, - @NotNull final String id) { - String processedId = id; - String processedJsonTag = jsonTag; - processedId = processedId.replace("minecraft:", ""); - processedId = processedId.toUpperCase(); - processedId = processedId.replace("\"", ""); - processedJsonTag = processedJsonTag.substring(1, processedJsonTag.length() - 1); - processedJsonTag = processedJsonTag.replace("id:", "\"id\":"); - processedJsonTag = processedJsonTag.replace("\\", ""); - Material material = Material.getMaterial(processedId); - - assert material != null; - ItemStack itemStack = new ItemStack(material); - net.minecraft.server.v1_16_R3.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); - - try { - nmsStack.setTag(MojangsonParser.parse(processedJsonTag)); - } catch (CommandSyntaxException e) { - e.printStackTrace(); - } - return CraftItemStack.asBukkitCopy(nmsStack); - } - - private static String toJson(@NotNull final ItemStack itemStack) { - return CraftItemStack.asNMSCopy(itemStack).getOrCreateTag().toString(); - } -} diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index 40c8bef..784ce39 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -4,9 +4,9 @@ miner: advanced-set-bonus: hunger-loss-multiplier: 0.5 potion-effects: - haste: 2 + fast_digging: 2 advanced-potion-effects: - haste: 3 + fast_digging: 3 advanced-lore: - "" - "<\$#f12711>&lADVANCED BONUS<\$#f5af19>" diff --git a/eco-core/core-proxy/src/main/java/com/willfp/ecoarmor/proxy/proxies/ChatComponentProxy.java b/eco-core/core-proxy/src/main/java/com/willfp/ecoarmor/proxy/proxies/ChatComponentProxy.java deleted file mode 100644 index e6c7bf1..0000000 --- a/eco-core/core-proxy/src/main/java/com/willfp/ecoarmor/proxy/proxies/ChatComponentProxy.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.willfp.ecoarmor.proxy.proxies; - - -import com.willfp.eco.util.proxy.AbstractProxy; -import org.jetbrains.annotations.NotNull; - -public interface ChatComponentProxy extends AbstractProxy { - /** - * Modify hover {@link org.bukkit.inventory.ItemStack}s using ArmorDisplay. - * @param object The NMS ChatComponent to modify. - * @return The modified ChatComponent. - */ - Object modifyComponent(@NotNull Object object); -} From a6156de8ffa40688d89925f3b4cfc49c256cccd6 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 11:40:16 +0000 Subject: [PATCH 18/35] Fixed crystal crafting --- .../java/com/willfp/ecoarmor/sets/util/ArmorUtils.java | 8 ++++++-- .../willfp/ecoarmor/upgrades/crystal/UpgradeCrystal.java | 7 ++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java index 035c7ab..0fca0ca 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java @@ -140,6 +140,10 @@ public class ArmorUtils { */ @Nullable public static String getCrystalTier(@NotNull final ItemStack itemStack) { + if (itemStack == null) { + return null; + } + ItemMeta meta = itemStack.getItemMeta(); if (meta == null) { @@ -287,10 +291,10 @@ public class ArmorUtils { } /** - * Get if item is advanced. + * Get the set from a shard. * * @param itemStack The item to check. - * @return If advanced. + * @return The set, or null if not a shard. */ @Nullable public static ArmorSet getShardSet(@NotNull final ItemStack itemStack) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/UpgradeCrystal.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/UpgradeCrystal.java index 1d9bc22..6393b65 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/UpgradeCrystal.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/UpgradeCrystal.java @@ -103,7 +103,12 @@ public class UpgradeCrystal { List recipeStrings = EcoArmorConfigs.TIERS.getStrings(tier + ".crystal-recipe"); - RecipePartUtils.registerLookup("ecoarmor:upgrade_crystal_" + tier, s -> new ComplexRecipePart(test -> Objects.equals(tier, ArmorUtils.getCrystalTier(test)), out)); + RecipePartUtils.registerLookup("ecoarmor:upgrade_crystal_" + tier, s -> new ComplexRecipePart(test -> { + if (ArmorUtils.getCrystalTier(test) == null) { + return false; + } + return Objects.equals(tier, ArmorUtils.getCrystalTier(test)); + }, out)); for (int i = 0; i < 9; i++) { builder.setRecipePart(i, RecipePartUtils.lookup(recipeStrings.get(i))); From d22a1b238a4724f68cb8b1a456cc34002a61bd70 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 11:47:15 +0000 Subject: [PATCH 19/35] Added comment to a disgusting bodge --- .../src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java index 0fca0ca..922650d 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java @@ -140,6 +140,7 @@ public class ArmorUtils { */ @Nullable public static String getCrystalTier(@NotNull final ItemStack itemStack) { + // I have no idea when null gets passed but it broke crystal crafting so this check goes here. if (itemStack == null) { return null; } From 18369340afd0c25c252f840b027d37af54087a77 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 13:26:53 +0000 Subject: [PATCH 20/35] Added young set --- .../core-plugin/src/main/resources/sets.yml | 173 +++++++++++++++++- 1 file changed, 172 insertions(+), 1 deletion(-) diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index 784ce39..cb84f39 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -338,4 +338,175 @@ reaper: - air - nether_star - - air \ No newline at end of file + - air + + +young: + set-bonus: + speed-multiplier: 1.25 + advanced-set-bonus: + speed-multiplier: 1.5 + advanced-potion-effects: + jump: 2 + advanced-lore: + - "" + - "<\$#f12711>&lADVANCED BONUS<\$#f5af19>" + - "&8» &bPermanent Jump Boost II" + - "&8» &bMove 50% faster" + - "&8&oRequires full set to be worn" + advancement-shard-name: "<\$#f12711>Advancement Shard:<\$#f5af19> &bYoung" + advancement-shard-lore: + - "&8Drop this onto &bYoung Armor" + - "&8to make it <\$#f12711>Advanced<\$#f5af19>." + shard-craftable: true + shard-recipe: + - prismarine_shard + - ecoarmor:set_young_helmet + - prismarine_shard + + - ecoarmor:set_young_chestplate + - nether_star + - ecoarmor:set_young_leggings + + - prismarine_shard + - ecoarmor:set_young_boots + - prismarine_shard + helmet: + enchants: + protection: 2 + unbreaking: 3 + material: player_skull + skull-texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWM0ODZhZjNiODgyNzY2ZTgyYTBiYzE2NjVmZjAyZWI2ZTg3M2I2ZTBkNzcxZjNhZGFiYzc1OWI3MjAyMjZhIn19fQ== + name: "&bYoung Helmet" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Helmet" + effective-durability: 768 + lore: + - "&b&lYOUNG SET BONUS" + - "&8» &bMove 25% faster" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - diamond + - redstone + - diamond + + - redstone + - air + - redstone + + - air + - air + - air + chestplate: + enchants: + protection: 2 + unbreaking: 3 + material: leather_chestplate + leather-color: "#DDE4F0" + name: "&bYoung Chestplate" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Chestplate" + effective-durability: 768 + lore: + - "&b&lYOUNG SET BONUS" + - "&8» &bMove 25% faster" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - diamond + - air + - diamond + + - redstone + - diamond + - redstone + + - diamond + - redstone + - diamond + elytra: + enchants: + unbreaking: 3 + material: elytra + name: "&bYoung Elytra" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Elytra" + effective-durability: 768 + lore: + - "&b&lYOUNG SET BONUS" + - "&8» &bMove 25% faster" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - redstone + - air + + - redstone + - elytra + - redstone + + - air + - redstone + - air + leggings: + enchants: + protection: 2 + unbreaking: 3 + material: leather_leggings + leather-color: "#DDE4F0" + name: "&bYoung Leggings" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Leggings" + effective-durability: 768 + lore: + - "&b&lYOUNG SET BONUS" + - "&8» &bMove 25% faster" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - diamond + - redstone + - diamond + + - redstone + - air + - redstone + + - diamond + - air + - diamond + boots: + enchants: + protection: 2 + unbreaking: 3 + depth_strider: 3 + material: leather_boots + leather-color: "#DDE4F0" + name: "&bYoung Boots" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Boots" + effective-durability: 768 + lore: + - "&b&lYOUNG SET BONUS" + - "&8» &bMove 25% faster" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - air + - air + + - diamond + - air + - diamond + + - redstone + - air + - redstone \ No newline at end of file From 26b7b1a0ccfd1dba02f87771def6f6577b09dd12 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 13:45:43 +0000 Subject: [PATCH 21/35] Fixed skull textures --- .../main/java/com/willfp/ecoarmor/display/ArmorDisplay.java | 5 ++++- eco-core/core-plugin/src/main/resources/sets.yml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java index e2c3290..106470f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/display/ArmorDisplay.java @@ -2,10 +2,12 @@ package com.willfp.ecoarmor.display; import com.willfp.ecoarmor.EcoArmorPlugin; import com.willfp.ecoarmor.config.EcoArmorConfigs; +import com.willfp.ecoarmor.proxy.proxies.SkullProxy; import com.willfp.ecoarmor.sets.ArmorSet; import com.willfp.ecoarmor.sets.meta.ArmorSlot; import com.willfp.ecoarmor.sets.util.ArmorUtils; import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; +import com.willfp.ecoarmor.util.ProxyUtils; import lombok.experimental.UtilityClass; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -125,7 +127,8 @@ public class ArmorDisplay { meta.setDisplayName(slotMeta.getDisplayName()); if (meta instanceof SkullMeta && slotMeta instanceof SkullMeta) { - ((SkullMeta) meta).setOwningPlayer(((SkullMeta) slotMeta).getOwningPlayer()); + String base64 = EcoArmorConfigs.SETS.getString(set.getName() + "." + slot.name().toLowerCase() + ".skull-texture"); + ProxyUtils.getProxy(SkullProxy.class).setTexture((SkullMeta) meta, base64); } if (meta instanceof LeatherArmorMeta && slotMeta instanceof LeatherArmorMeta) { diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index cb84f39..0c95c4b 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -375,7 +375,7 @@ young: enchants: protection: 2 unbreaking: 3 - material: player_skull + material: player_head skull-texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWM0ODZhZjNiODgyNzY2ZTgyYTBiYzE2NjVmZjAyZWI2ZTg3M2I2ZTBkNzcxZjNhZGFiYzc1OWI3MjAyMjZhIn19fQ== name: "&bYoung Helmet" advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Helmet" From c63659df0f4ab5f6f4b743a15a5f7ddc7b7afd0a Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 14:10:35 +0000 Subject: [PATCH 22/35] Added exotic, obsidian, and osmium crystals --- .../willfp/ecoarmor/sets/util/ArmorUtils.java | 20 ++ .../core-plugin/src/main/resources/tiers.yml | 275 +++++++++++++++++- 2 files changed, 294 insertions(+), 1 deletion(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java index 922650d..5daf76c 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/ArmorUtils.java @@ -207,6 +207,10 @@ public class ArmorUtils { int armor = EcoArmorConfigs.TIERS.getInt(tier + ".properties." + slot.name().toLowerCase() + ".armor"); int toughness = EcoArmorConfigs.TIERS.getInt(tier + ".properties." + slot.name().toLowerCase() + ".toughness"); int knockback = EcoArmorConfigs.TIERS.getInt(tier + ".properties." + slot.name().toLowerCase() + ".knockback-resistance"); + int speed = EcoArmorConfigs.TIERS.getInt(tier + ".properties." + slot.name().toLowerCase() + ".speed-percentage"); + int attackSpeed = EcoArmorConfigs.TIERS.getInt(tier + ".properties." + slot.name().toLowerCase() + ".attack-speed-percentage"); + int attackDamage = EcoArmorConfigs.TIERS.getInt(tier + ".properties." + slot.name().toLowerCase() + ".attack-damage-percentage"); + int attackKnockback = EcoArmorConfigs.TIERS.getInt(tier + ".properties." + slot.name().toLowerCase() + ".attack-knockback-percentage"); if (armor > 0) { meta.removeAttributeModifier(Attribute.GENERIC_ARMOR); @@ -220,6 +224,22 @@ public class ArmorUtils { meta.removeAttributeModifier(Attribute.GENERIC_KNOCKBACK_RESISTANCE); meta.addAttributeModifier(Attribute.GENERIC_KNOCKBACK_RESISTANCE, new AttributeModifier(UUID.randomUUID(), "ecoarmor-knockback", (double) knockback / 10, AttributeModifier.Operation.ADD_NUMBER, slot.getSlot())); } + if (speed != 0) { + meta.removeAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED); + meta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, new AttributeModifier(UUID.randomUUID(), "ecoarmor-speed", (double) speed / 100, AttributeModifier.Operation.ADD_SCALAR, slot.getSlot())); + } + if (attackSpeed != 0) { + meta.removeAttributeModifier(Attribute.GENERIC_ATTACK_SPEED); + meta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, new AttributeModifier(UUID.randomUUID(), "ecoarmor-attackspeed", (double) attackSpeed / 100, AttributeModifier.Operation.ADD_SCALAR, slot.getSlot())); + } + if (attackDamage != 0) { + meta.removeAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE); + meta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, new AttributeModifier(UUID.randomUUID(), "ecoarmor-attackdamage", (double) attackDamage / 100, AttributeModifier.Operation.ADD_SCALAR, slot.getSlot())); + } + if (attackKnockback != 0) { + meta.removeAttributeModifier(Attribute.GENERIC_ATTACK_KNOCKBACK); + meta.addAttributeModifier(Attribute.GENERIC_ATTACK_KNOCKBACK, new AttributeModifier(UUID.randomUUID(), "ecoarmor-attackknockback", (double) attackKnockback / 100, AttributeModifier.Operation.ADD_SCALAR, slot.getSlot())); + } itemStack.setItemMeta(meta); } diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index f3a8ebd..e4765ac 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -33,22 +33,42 @@ iron: armor: 2 toughness: 0 knockback-resistance: 0 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 chestplate: armor: 6 toughness: 0 knockback-resistance: 0 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 elytra: armor: 2 toughness: 0 knockback-resistance: 0 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 leggings: armor: 5 toughness: 0 knockback-resistance: 0 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 boots: armor: 2 toughness: 0 knockback-resistance: 0 + speed-percentage: 10 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 diamond: display: "&b&lDIAMOND" @@ -76,22 +96,42 @@ diamond: armor: 3 toughness: 2 knockback-resistance: 0 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 chestplate: armor: 8 toughness: 2 knockback-resistance: 0 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 elytra: armor: 3 toughness: 0 knockback-resistance: 0 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 leggings: armor: 6 toughness: 2 knockback-resistance: 0 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 boots: armor: 3 toughness: 2 knockback-resistance: 0 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 netherite: display: "&c&lNETHERITE" @@ -119,22 +159,42 @@ netherite: armor: 3 toughness: 3 knockback-resistance: 1 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 chestplate: armor: 8 toughness: 3 knockback-resistance: 1 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 elytra: armor: 3 toughness: 0 knockback-resistance: 1 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 leggings: armor: 6 toughness: 3 knockback-resistance: 1 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 boots: armor: 3 toughness: 3 knockback-resistance: 1 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 manyullyn: display: "&d&k!!&r <\$#f953c6>&lMANYULLYN<\$#b91d73>&r &d&k!!&r" @@ -162,19 +222,232 @@ manyullyn: armor: 3 toughness: 5 knockback-resistance: 2 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 chestplate: armor: 8 toughness: 5 knockback-resistance: 2 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 elytra: armor: 3 toughness: 0 knockback-resistance: 2 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 leggings: armor: 6 toughness: 5 knockback-resistance: 2 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 boots: armor: 3 toughness: 5 - knockback-resistance: 2 \ No newline at end of file + knockback-resistance: 2 + speed-percentage: 0 + attack-speed-percentage: 0 + attack-damage-percentage: 0 + attack-knockback-percentage: 0 + + + +obsidian: + display: "&0&lOBSIDIAN" + requires-tier: iron # Set to 'none' to always allow application + crystal-craftable: true + crystal-name: "&0Obsidian Upgrade Crystal" + crystal-recipe: + - air + - obsidian + - air + + - obsidian + - ecoarmor:upgrade_crystal_iron + - obsidian + + - air + - obsidian + - air + crystal-lore: + - "&8Drop this onto an armor piece" + - "&8to set its tier to:" + - "&0&lOBSIDIAN" + properties: + helmet: + armor: 3 + toughness: 4 + knockback-resistance: 1 + speed-percentage: -10 + attack-speed-percentage: -10 + attack-damage-percentage: 5 + attack-knockback-percentage: 10 + chestplate: + armor: 8 + toughness: 4 + knockback-resistance: 1 + speed-percentage: -10 + attack-speed-percentage: -10 + attack-damage-percentage: 5 + attack-knockback-percentage: 10 + elytra: + armor: 6 + toughness: 2 + knockback-resistance: 1 + speed-percentage: -10 + attack-speed-percentage: -10 + attack-damage-percentage: 5 + attack-knockback-percentage: 10 + leggings: + armor: 6 + toughness: 4 + knockback-resistance: 1 + speed-percentage: -10 + attack-speed-percentage: -10 + attack-damage-percentage: 5 + attack-knockback-percentage: 10 + boots: + armor: 3 + toughness: 4 + knockback-resistance: 1 + speed-percentage: -10 + attack-speed-percentage: -10 + attack-damage-percentage: 5 + attack-knockback-percentage: 10 + +osmium: + display: "&b&k!!&r <$#c7f1ff>&lOSMIUM<$#5c92ff>&r &b&k!!" + requires-tier: obsidian # Set to 'none' to always allow application + crystal-craftable: true + crystal-name: "<$#c7f1ff>Osmium upgrade crystal<$#5c92ff>" + crystal-recipe: + - air + - netherite_block + - air + + - netherite_block + - ecoarmor:upgrade_crystal_obsidian + - netherite_block + + - air + - netherite_block + - air + crystal-lore: + - "&8Drop this onto an armor piece" + - "&8to set its tier to:" + - "&b&k!!&r <$#c7f1ff>&lOSMIUM<$#5c92ff>&r &b&k!!" + properties: + helmet: + armor: 3 + toughness: 6 + knockback-resistance: 3 + speed-percentage: -25 + attack-speed-percentage: -15 + attack-damage-percentage: 10 + attack-knockback-percentage: 25 + chestplate: + armor: 8 + toughness: 6 + knockback-resistance: 3 + speed-percentage: -25 + attack-speed-percentage: -15 + attack-damage-percentage: 10 + attack-knockback-percentage: 25 + elytra: + armor: 8 + toughness: 6 + knockback-resistance: 3 + speed-percentage: -25 + attack-speed-percentage: -15 + attack-damage-percentage: 10 + attack-knockback-percentage: 25 + leggings: + armor: 6 + toughness: 6 + knockback-resistance: 3 + speed-percentage: -25 + attack-speed-percentage: -15 + attack-damage-percentage: 10 + attack-knockback-percentage: 25 + boots: + armor: 3 + toughness: 6 + knockback-resistance: 3 + speed-percentage: -25 + attack-speed-percentage: -15 + attack-damage-percentage: 10 + attack-knockback-percentage: 25 + + + +exotic: + display: "&6&k!!&r <\$#f79d00>&lEXOTIC<\$#64f38c>&r &6&k!!&r" + requires-tier: netherite # Set to 'none' to always allow application + crystal-craftable: true + crystal-name: "<\$#f79d00>Exotic Upgrade Crystal<\$#f79d00>" + crystal-recipe: + - ecoarmor:upgrade_crystal_netherite + - turtle_egg + - ecoarmor:upgrade_crystal_netherite + + - turtle_egg + - ecoarmor:upgrade_crystal_obsidian + - turtle_egg + + - ecoarmor:upgrade_crystal_netherite + - turtle_egg + - ecoarmor:upgrade_crystal_netherite + crystal-lore: + - "&8Drop this onto an armor piece" + - "&8to set its tier to:" + - "&6&k!!&r <\$#f79d00>&lEXOTIC<\$#64f38c>&r &6&k!!&r" + properties: + helmet: + armor: 3 + toughness: 3 + knockback-resistance: 0 + speed-percentage: 10 + attack-speed-percentage: 5 + attack-damage-percentage: 0 + attack-knockback-percentage: -25 + chestplate: + armor: 8 + toughness: 3 + knockback-resistance: 0 + speed-percentage: 10 + attack-speed-percentage: 5 + attack-damage-percentage: 0 + attack-knockback-percentage: -25 + elytra: + armor: 3 + toughness: 0 + knockback-resistance: 0 + speed-percentage: 10 + attack-speed-percentage: 5 + attack-damage-percentage: 0 + attack-knockback-percentage: -25 + leggings: + armor: 6 + toughness: 3 + knockback-resistance: 0 + speed-percentage: 10 + attack-speed-percentage: 5 + attack-damage-percentage: 0 + attack-knockback-percentage: -25 + boots: + armor: 3 + toughness: 3 + knockback-resistance: 0 + speed-percentage: 10 + attack-speed-percentage: 5 + attack-damage-percentage: 0 + attack-knockback-percentage: -25 \ No newline at end of file From 953a9c50e069c3c4c6bc1978bb9b58394ed03a4d Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 14:12:20 +0000 Subject: [PATCH 23/35] Fixed osmium gradients --- eco-core/core-plugin/src/main/resources/tiers.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index e4765ac..1f68891 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -325,10 +325,10 @@ obsidian: attack-knockback-percentage: 10 osmium: - display: "&b&k!!&r <$#c7f1ff>&lOSMIUM<$#5c92ff>&r &b&k!!" + display: "&b&k!!&r <\$#c7f1ff>&lOSMIUM<\$#5c92ff>&r &b&k!!" requires-tier: obsidian # Set to 'none' to always allow application crystal-craftable: true - crystal-name: "<$#c7f1ff>Osmium upgrade crystal<$#5c92ff>" + crystal-name: "<\$#c7f1ff>Osmium upgrade crystal<\$#5c92ff>" crystal-recipe: - air - netherite_block @@ -344,7 +344,7 @@ osmium: crystal-lore: - "&8Drop this onto an armor piece" - "&8to set its tier to:" - - "&b&k!!&r <$#c7f1ff>&lOSMIUM<$#5c92ff>&r &b&k!!" + - "&b&k!!&r <\$#c7f1ff>&lOSMIUM<\$#5c92ff>&r &b&k!!" properties: helmet: armor: 3 From 4c76163ec793c6a06757cb0c61fd69467a0e5cde Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 14:21:13 +0000 Subject: [PATCH 24/35] Balanced obsidian/osmium/exotic armor --- .../core-plugin/src/main/resources/tiers.yml | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index 1f68891..504c1b4 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -262,10 +262,10 @@ manyullyn: obsidian: - display: "&0&lOBSIDIAN" + display: "&#a9a9a9&lOBSIDIAN" requires-tier: iron # Set to 'none' to always allow application crystal-craftable: true - crystal-name: "&0Obsidian Upgrade Crystal" + crystal-name: "&#a9a9a9Obsidian Upgrade Crystal" crystal-recipe: - air - obsidian @@ -281,7 +281,7 @@ obsidian: crystal-lore: - "&8Drop this onto an armor piece" - "&8to set its tier to:" - - "&0&lOBSIDIAN" + - "&#a9a9a9&lOBSIDIAN" properties: helmet: armor: 3 @@ -289,7 +289,7 @@ obsidian: knockback-resistance: 1 speed-percentage: -10 attack-speed-percentage: -10 - attack-damage-percentage: 5 + attack-damage-percentage: 0 attack-knockback-percentage: 10 chestplate: armor: 8 @@ -297,7 +297,7 @@ obsidian: knockback-resistance: 1 speed-percentage: -10 attack-speed-percentage: -10 - attack-damage-percentage: 5 + attack-damage-percentage: 0 attack-knockback-percentage: 10 elytra: armor: 6 @@ -305,15 +305,15 @@ obsidian: knockback-resistance: 1 speed-percentage: -10 attack-speed-percentage: -10 - attack-damage-percentage: 5 + attack-damage-percentage: 0 attack-knockback-percentage: 10 leggings: armor: 6 toughness: 4 knockback-resistance: 1 speed-percentage: -10 - attack-speed-percentage: -10 - attack-damage-percentage: 5 + attack-speed-percentage: -1 + attack-damage-percentage: 0 attack-knockback-percentage: 10 boots: armor: 3 @@ -321,7 +321,7 @@ obsidian: knockback-resistance: 1 speed-percentage: -10 attack-speed-percentage: -10 - attack-damage-percentage: 5 + attack-damage-percentage: 0 attack-knockback-percentage: 10 osmium: @@ -350,41 +350,41 @@ osmium: armor: 3 toughness: 6 knockback-resistance: 3 - speed-percentage: -25 + speed-percentage: -15 attack-speed-percentage: -15 - attack-damage-percentage: 10 + attack-damage-percentage: 5 attack-knockback-percentage: 25 chestplate: armor: 8 toughness: 6 knockback-resistance: 3 - speed-percentage: -25 + speed-percentage: -15 attack-speed-percentage: -15 - attack-damage-percentage: 10 + attack-damage-percentage: 5 attack-knockback-percentage: 25 elytra: armor: 8 toughness: 6 knockback-resistance: 3 - speed-percentage: -25 + speed-percentage: -15 attack-speed-percentage: -15 - attack-damage-percentage: 10 + attack-damage-percentage: 5 attack-knockback-percentage: 25 leggings: armor: 6 toughness: 6 knockback-resistance: 3 - speed-percentage: -25 + speed-percentage: -15 attack-speed-percentage: -15 - attack-damage-percentage: 10 + attack-damage-percentage: 5 attack-knockback-percentage: 25 boots: armor: 3 toughness: 6 knockback-resistance: 3 - speed-percentage: -25 + speed-percentage: -15 attack-speed-percentage: -15 - attack-damage-percentage: 10 + attack-damage-percentage: 5 attack-knockback-percentage: 25 @@ -393,7 +393,7 @@ exotic: display: "&6&k!!&r <\$#f79d00>&lEXOTIC<\$#64f38c>&r &6&k!!&r" requires-tier: netherite # Set to 'none' to always allow application crystal-craftable: true - crystal-name: "<\$#f79d00>Exotic Upgrade Crystal<\$#f79d00>" + crystal-name: "<\$#f79d00>Exotic Upgrade Crystal<\$#64f38c>" crystal-recipe: - ecoarmor:upgrade_crystal_netherite - turtle_egg @@ -413,41 +413,41 @@ exotic: properties: helmet: armor: 3 - toughness: 3 + toughness: 2 knockback-resistance: 0 - speed-percentage: 10 - attack-speed-percentage: 5 - attack-damage-percentage: 0 - attack-knockback-percentage: -25 + speed-percentage: 5 + attack-speed-percentage: 10 + attack-damage-percentage: -5 + attack-knockback-percentage: -20 chestplate: armor: 8 - toughness: 3 + toughness: 2 knockback-resistance: 0 - speed-percentage: 10 - attack-speed-percentage: 5 - attack-damage-percentage: 0 - attack-knockback-percentage: -25 + speed-percentage: 5 + attack-speed-percentage: 10 + attack-damage-percentage: -5 + attack-knockback-percentage: -20 elytra: armor: 3 toughness: 0 knockback-resistance: 0 - speed-percentage: 10 - attack-speed-percentage: 5 - attack-damage-percentage: 0 - attack-knockback-percentage: -25 + speed-percentage: 5 + attack-speed-percentage: 10 + attack-damage-percentage: -5 + attack-knockback-percentage: -20 leggings: armor: 6 - toughness: 3 + toughness: 2 knockback-resistance: 0 - speed-percentage: 10 - attack-speed-percentage: 5 - attack-damage-percentage: 0 - attack-knockback-percentage: -25 + speed-percentage: 5 + attack-speed-percentage: 10 + attack-damage-percentage: -5 + attack-knockback-percentage: -20 boots: armor: 3 - toughness: 3 + toughness: 2 knockback-resistance: 0 - speed-percentage: 10 - attack-speed-percentage: 5 - attack-damage-percentage: 0 - attack-knockback-percentage: -25 \ No newline at end of file + speed-percentage: 5 + attack-speed-percentage: 10 + attack-damage-percentage: -5 + attack-knockback-percentage: -20 \ No newline at end of file From 4b66eb040fd5992bab38a7a98346aac3aa8130e6 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 14:23:12 +0000 Subject: [PATCH 25/35] Renamed obsidian to cobalt --- eco-core/core-plugin/src/main/resources/tiers.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index 504c1b4..3f48a06 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -261,11 +261,11 @@ manyullyn: -obsidian: - display: "&#a9a9a9&lOBSIDIAN" +cobalt: + display: "a285c&lCOBALT" requires-tier: iron # Set to 'none' to always allow application crystal-craftable: true - crystal-name: "&#a9a9a9Obsidian Upgrade Crystal" + crystal-name: "a285cCobalt Upgrade Crystal" crystal-recipe: - air - obsidian @@ -281,7 +281,7 @@ obsidian: crystal-lore: - "&8Drop this onto an armor piece" - "&8to set its tier to:" - - "&#a9a9a9&lOBSIDIAN" + - "a285c&lOBSIDIAN" properties: helmet: armor: 3 @@ -335,7 +335,7 @@ osmium: - air - netherite_block - - ecoarmor:upgrade_crystal_obsidian + - ecoarmor:upgrade_crystal_cobalt - netherite_block - air @@ -400,7 +400,7 @@ exotic: - ecoarmor:upgrade_crystal_netherite - turtle_egg - - ecoarmor:upgrade_crystal_obsidian + - ecoarmor:upgrade_crystal_cobalt - turtle_egg - ecoarmor:upgrade_crystal_netherite From f3f2c032f0aaad40b9a757c5469652b166ab2cf0 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 14:24:32 +0000 Subject: [PATCH 26/35] Changed cobalt color --- eco-core/core-plugin/src/main/resources/tiers.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index 3f48a06..481f1a9 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -262,10 +262,10 @@ manyullyn: cobalt: - display: "a285c&lCOBALT" + display: "/ab&lCOBALT" requires-tier: iron # Set to 'none' to always allow application crystal-craftable: true - crystal-name: "a285cCobalt Upgrade Crystal" + crystal-name: "/abCobalt Upgrade Crystal" crystal-recipe: - air - obsidian @@ -281,7 +281,7 @@ cobalt: crystal-lore: - "&8Drop this onto an armor piece" - "&8to set its tier to:" - - "a285c&lOBSIDIAN" + - "/ab&lCOBALT" properties: helmet: armor: 3 From 054d152b7d994a8c11414119fb3d35fb4b157c63 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 14:26:14 +0000 Subject: [PATCH 27/35] Removed debug iron speeed buff --- eco-core/core-plugin/src/main/resources/tiers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index 481f1a9..e85850f 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -65,7 +65,7 @@ iron: armor: 2 toughness: 0 knockback-resistance: 0 - speed-percentage: 10 + speed-percentage: 0 attack-speed-percentage: 0 attack-damage-percentage: 0 attack-knockback-percentage: 0 From a231b74c2082f8f1be4be540559ab48ec2496033 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 14:27:36 +0000 Subject: [PATCH 28/35] Fixed osmium requiring non-existent set --- eco-core/core-plugin/src/main/resources/tiers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index e85850f..d31e670 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -326,7 +326,7 @@ cobalt: osmium: display: "&b&k!!&r <\$#c7f1ff>&lOSMIUM<\$#5c92ff>&r &b&k!!" - requires-tier: obsidian # Set to 'none' to always allow application + requires-tier: cobalt # Set to 'none' to always allow application crystal-craftable: true crystal-name: "<\$#c7f1ff>Osmium upgrade crystal<\$#5c92ff>" crystal-recipe: From 9fe3cbd53a048e0d884a97a105665e3e0481776d Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 18:04:57 +0000 Subject: [PATCH 29/35] Fixed armor set crafting --- .../com/willfp/ecoarmor/EcoArmorPlugin.java | 4 +- .../com/willfp/ecoarmor/sets/ArmorSet.java | 15 +++--- .../willfp/ecoarmor/sets/meta/ArmorSlot.java | 6 ++- .../advanced/AdvancementShardListener.java | 2 +- .../upgrades/crystal/CrystalListener.java | 2 +- .../ecoarmor/util/DiscoverRecipeListener.java | 46 +++++++++++++++++++ .../core-plugin/src/main/resources/config.yml | 1 + 7 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/DiscoverRecipeListener.java diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index 297775a..fe56131 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -19,6 +19,7 @@ import com.willfp.ecoarmor.sets.util.PotionEffectListener; import com.willfp.ecoarmor.upgrades.advanced.AdvancementShardListener; import com.willfp.ecoarmor.upgrades.crystal.CrystalListener; import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; +import com.willfp.ecoarmor.util.DiscoverRecipeListener; import lombok.Getter; import org.bukkit.event.Listener; @@ -132,7 +133,8 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { new CrystalListener(this), new AdvancementShardListener(this), new PotionEffectListener(this), - new EffectiveDurabilityListener(this) + new EffectiveDurabilityListener(this), + new DiscoverRecipeListener(this) ); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java index f76b3c1..19ad38c 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java @@ -235,13 +235,14 @@ public class ArmorSet { } itemStack.setItemMeta(meta); - - RecipePartUtils.registerLookup("ecoarmor:set_" + name.toLowerCase() + "_" + pieceName, s -> new ComplexRecipePart(test -> { - if (ArmorSlot.getSlot(test) != ArmorSlot.getSlot(itemStack)) { - return false; - } - return Objects.equals(this, ArmorUtils.getSetOnItem(test)); - }, itemStack)); + if (!advanced) { + RecipePartUtils.registerLookup("ecoarmor:set_" + name.toLowerCase() + "_" + pieceName, s -> new ComplexRecipePart(test -> { + if (ArmorSlot.getSlot(test) != ArmorSlot.getSlot(itemStack)) { + return false; + } + return Objects.equals(this, ArmorUtils.getSetOnItem(test)); + }, itemStack)); + } constructRecipe(slot, itemStack); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java index 9a7fa1d..2d7e5e5 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java @@ -50,7 +50,11 @@ public enum ArmorSlot { * @return The slot, or null. */ @Nullable - public static ArmorSlot getSlot(@NotNull final ItemStack itemStack) { + public static ArmorSlot getSlot(@Nullable final ItemStack itemStack) { + if (itemStack == null) { + return null; + } + Material material = itemStack.getType(); String name = material.name().toLowerCase(); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java index 3351ef7..5b56ea4 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java @@ -74,7 +74,7 @@ public class AdvancementShardListener extends PluginDependent implements Listene ArmorUtils.setAdvanced(current, true); - event.getWhoClicked().setItemOnCursor(null); + event.getWhoClicked().setItemOnCursor(new ItemStack(Material.AIR)); event.setCancelled(true); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java index 17e827f..c309b18 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java @@ -66,7 +66,7 @@ public class CrystalListener extends PluginDependent implements Listener { ArmorUtils.setTier(current, tier); - event.getWhoClicked().setItemOnCursor(null); + event.getWhoClicked().setItemOnCursor(new ItemStack(Material.AIR)); event.setCancelled(true); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/DiscoverRecipeListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/DiscoverRecipeListener.java new file mode 100644 index 0000000..b899a99 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/DiscoverRecipeListener.java @@ -0,0 +1,46 @@ +package com.willfp.ecoarmor.util; + +import com.willfp.eco.util.internal.PluginDependent; +import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.ShapedRecipe; +import org.jetbrains.annotations.NotNull; + +public class DiscoverRecipeListener extends PluginDependent implements Listener { + /** + * Register listener. + * + * @param plugin Talismans. + */ + public DiscoverRecipeListener(@NotNull final AbstractEcoPlugin plugin) { + super(plugin); + } + + /** + * Unlock all recipes on player join. + * + * @param event The event to listen for. + */ + @EventHandler + public void onJoin(@NotNull final PlayerJoinEvent event) { + Player player = event.getPlayer(); + + if (this.getPlugin().getConfigYml().getBool("discover-recipes")) { + Bukkit.getServer().recipeIterator().forEachRemaining(recipe -> { + if (recipe instanceof ShapedRecipe) { + NamespacedKey key = ((ShapedRecipe) recipe).getKey(); + if (key.getNamespace().equals("ecoarmor")) { + if (!key.getKey().contains("displayed")) { + player.discoverRecipe(key); + } + } + } + }); + } + } +} diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 73aa5b9..dd1f57b 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -3,6 +3,7 @@ # by Auxilor # +discover-recipes: true # If all recipes should be automatically discovered. # Effects are passive abilities that happen when wearing a full set with the effect present. effects: From 4b70f308016b56ee2bb935f8972523b44a9b2633 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 18:07:50 +0000 Subject: [PATCH 30/35] Fixed advanced recipes being constructed --- .../com/willfp/ecoarmor/sets/ArmorSet.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java index 19ad38c..19372d2 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java @@ -235,18 +235,18 @@ public class ArmorSet { } itemStack.setItemMeta(meta); + RecipePartUtils.registerLookup("ecoarmor:set_" + name.toLowerCase() + "_" + pieceName, s -> new ComplexRecipePart(test -> { + if (ArmorSlot.getSlot(test) != ArmorSlot.getSlot(itemStack)) { + return false; + } + return Objects.equals(this, ArmorUtils.getSetOnItem(test)); + }, itemStack)); + + if (!advanced) { - RecipePartUtils.registerLookup("ecoarmor:set_" + name.toLowerCase() + "_" + pieceName, s -> new ComplexRecipePart(test -> { - if (ArmorSlot.getSlot(test) != ArmorSlot.getSlot(itemStack)) { - return false; - } - return Objects.equals(this, ArmorUtils.getSetOnItem(test)); - }, itemStack)); + constructRecipe(slot, itemStack); } - - constructRecipe(slot, itemStack); - return itemStack; } From 8ee430de943c7d182fef4f6269a203db2524519f Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 19:11:44 +0000 Subject: [PATCH 31/35] Updated to new gradient syntax --- .../core-plugin/src/main/resources/sets.yml | 48 +++++++++---------- .../core-plugin/src/main/resources/tiers.yml | 18 +++---- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index 0c95c4b..9b0e2c3 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -9,14 +9,14 @@ miner: fast_digging: 3 advanced-lore: - "" - - "<\$#f12711>&lADVANCED BONUS<\$#f5af19>" + - "&lADVANCED BONUS" - "&8» &6Lose 50% less hunger" - "&8» &6Permanent Haste III" - "&8&oRequires full set to be worn" - advancement-shard-name: "<\$#f12711>Advancement Shard:<\$#f5af19> &9Miner" + advancement-shard-name: "Advancement Shard: &9Miner" advancement-shard-lore: - "&8Drop this onto &9Miner Armor" - - "&8to make it <\$#f12711>Advanced<\$#f5af19>." + - "&8to make it Advanced." shard-craftable: true shard-recipe: - prismarine_shard @@ -37,7 +37,7 @@ miner: material: leather_helmet leather-color: "#6699cc" name: "&9Miner Helmet" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Helmet" + advanced-name: "Advanced&9 Miner Helmet" effective-durability: 1024 lore: - "&9&lMINER SET BONUS" @@ -66,7 +66,7 @@ miner: material: leather_chestplate leather-color: "#6699cc" name: "&9Miner Chestplate" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Chestplate" + advanced-name: "Advanced&9 Miner Chestplate" effective-durability: 1024 lore: - "&9&lMINER SET BONUS" @@ -93,7 +93,7 @@ miner: unbreaking: 1 material: elytra name: "&9Miner Elytra" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Elytra" + advanced-name: "Advanced&9 Miner Elytra" effective-durability: 1024 lore: - "&9&lMINER SET BONUS" @@ -122,7 +122,7 @@ miner: material: leather_leggings leather-color: "#6699cc" name: "&9Miner Leggings" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Leggings" + advanced-name: "Advanced&9 Miner Leggings" effective-durability: 1024 lore: - "&9&lMINER SET BONUS" @@ -151,7 +151,7 @@ miner: material: leather_boots leather-color: "#6699cc" name: "&9Miner Boots" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Boots" + advanced-name: "Advanced&9 Miner Boots" effective-durability: 1024 lore: - "&9&lMINER SET BONUS" @@ -181,13 +181,13 @@ reaper: damage-taken-multiplier: 0.9 advanced-lore: - "" - - "<\$#f12711>&lADVANCED BONUS<\$#f5af19>" + - "&lADVANCED BONUS" - "&8» &6Take 10% less damage" - "&8&oRequires full set to be worn" - advancement-shard-name: "<\$#f12711>Advancement Shard:<\$#f5af19> &cReaper" + advancement-shard-name: "Advancement Shard: &cReaper" advancement-shard-lore: - "&8Drop this onto &cReaper Armor" - - "&8to make it <\$#f12711>Advanced<\$#f5af19>." + - "&8to make it Advanced." shard-craftable: true shard-recipe: - prismarine_shard @@ -208,7 +208,7 @@ reaper: material: leather_helmet leather-color: "#303030" name: "&cReaper Helmet" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Helmet" + advanced-name: "Advanced&c Reaper Helmet" effective-durability: 2048 lore: - "&c&lREAPER SET BONUS" @@ -236,7 +236,7 @@ reaper: material: leather_chestplate leather-color: "#303030" name: "&cReaper Chestplate" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Chestplate" + advanced-name: "Advanced&c Reaper Chestplate" effective-durability: 2048 lore: - "&c&lREAPER SET BONUS" @@ -262,7 +262,7 @@ reaper: unbreaking: 3 material: elytra name: "&cReaper Elytra" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Elytra" + advanced-name: "Advanced&c Reaper Elytra" effective-durability: 2048 lore: - "&c&lREAPER SET BONUS" @@ -290,7 +290,7 @@ reaper: material: leather_leggings leather-color: "#303030" name: "&cReaper Leggings" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Leggings" + advanced-name: "Advanced&c Reaper Leggings" effective-durability: 2048 lore: - "&c&lREAPER SET BONUS" @@ -318,7 +318,7 @@ reaper: material: leather_boots leather-color: "#303030" name: "&cReaper Boots" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&c Reaper Boots" + advanced-name: "Advanced&c Reaper Boots" effective-durability: 2048 lore: - "&c&lREAPER SET BONUS" @@ -350,14 +350,14 @@ young: jump: 2 advanced-lore: - "" - - "<\$#f12711>&lADVANCED BONUS<\$#f5af19>" + - "&lADVANCED BONUS" - "&8» &bPermanent Jump Boost II" - "&8» &bMove 50% faster" - "&8&oRequires full set to be worn" - advancement-shard-name: "<\$#f12711>Advancement Shard:<\$#f5af19> &bYoung" + advancement-shard-name: "Advancement Shard: &bYoung" advancement-shard-lore: - "&8Drop this onto &bYoung Armor" - - "&8to make it <\$#f12711>Advanced<\$#f5af19>." + - "&8to make it Advanced." shard-craftable: true shard-recipe: - prismarine_shard @@ -378,7 +378,7 @@ young: material: player_head skull-texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWM0ODZhZjNiODgyNzY2ZTgyYTBiYzE2NjVmZjAyZWI2ZTg3M2I2ZTBkNzcxZjNhZGFiYzc1OWI3MjAyMjZhIn19fQ== name: "&bYoung Helmet" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Helmet" + advanced-name: "Advanced&b Young Helmet" effective-durability: 768 lore: - "&b&lYOUNG SET BONUS" @@ -406,7 +406,7 @@ young: material: leather_chestplate leather-color: "#DDE4F0" name: "&bYoung Chestplate" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Chestplate" + advanced-name: "Advanced&b Young Chestplate" effective-durability: 768 lore: - "&b&lYOUNG SET BONUS" @@ -432,7 +432,7 @@ young: unbreaking: 3 material: elytra name: "&bYoung Elytra" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Elytra" + advanced-name: "Advanced&b Young Elytra" effective-durability: 768 lore: - "&b&lYOUNG SET BONUS" @@ -460,7 +460,7 @@ young: material: leather_leggings leather-color: "#DDE4F0" name: "&bYoung Leggings" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Leggings" + advanced-name: "Advanced&b Young Leggings" effective-durability: 768 lore: - "&b&lYOUNG SET BONUS" @@ -489,7 +489,7 @@ young: material: leather_boots leather-color: "#DDE4F0" name: "&bYoung Boots" - advanced-name: "<\$#f12711>Advanced<\$#f5af19>&b Young Boots" + advanced-name: "Advanced&b Young Boots" effective-durability: 768 lore: - "&b&lYOUNG SET BONUS" diff --git a/eco-core/core-plugin/src/main/resources/tiers.yml b/eco-core/core-plugin/src/main/resources/tiers.yml index d31e670..b94a108 100644 --- a/eco-core/core-plugin/src/main/resources/tiers.yml +++ b/eco-core/core-plugin/src/main/resources/tiers.yml @@ -197,10 +197,10 @@ netherite: attack-knockback-percentage: 0 manyullyn: - display: "&d&k!!&r <\$#f953c6>&lMANYULLYN<\$#b91d73>&r &d&k!!&r" + display: "&d&k!!&r &lMANYULLYN&r &d&k!!&r" requires-tier: netherite # Set to 'none' to always allow application crystal-craftable: true - crystal-name: "<\$#f953c6>Manyullyn Upgrade Crystal<\$#b91d73>" + crystal-name: "Manyullyn Upgrade Crystal" crystal-recipe: - ecoarmor:upgrade_crystal_netherite - enchanted_golden_apple @@ -216,7 +216,7 @@ manyullyn: crystal-lore: - "&8Drop this onto an armor piece" - "&8to set its tier to:" - - "&d&k!!&r <\$#f953c6>&lMANYULLYN<\$#b91d73>&r &d&k!!&r" + - "&d&k!!&r &lMANYULLYN&r &d&k!!&r" properties: helmet: armor: 3 @@ -325,10 +325,10 @@ cobalt: attack-knockback-percentage: 10 osmium: - display: "&b&k!!&r <\$#c7f1ff>&lOSMIUM<\$#5c92ff>&r &b&k!!" + display: "&b&k!!&r &lOSMIUM&r &b&k!!" requires-tier: cobalt # Set to 'none' to always allow application crystal-craftable: true - crystal-name: "<\$#c7f1ff>Osmium upgrade crystal<\$#5c92ff>" + crystal-name: "Osmium upgrade crystal" crystal-recipe: - air - netherite_block @@ -344,7 +344,7 @@ osmium: crystal-lore: - "&8Drop this onto an armor piece" - "&8to set its tier to:" - - "&b&k!!&r <\$#c7f1ff>&lOSMIUM<\$#5c92ff>&r &b&k!!" + - "&b&k!!&r &lOSMIUM&r &b&k!!" properties: helmet: armor: 3 @@ -390,10 +390,10 @@ osmium: exotic: - display: "&6&k!!&r <\$#f79d00>&lEXOTIC<\$#64f38c>&r &6&k!!&r" + display: "&6&k!!&r &lEXOTIC&r &6&k!!&r" requires-tier: netherite # Set to 'none' to always allow application crystal-craftable: true - crystal-name: "<\$#f79d00>Exotic Upgrade Crystal<\$#64f38c>" + crystal-name: "Exotic Upgrade Crystal" crystal-recipe: - ecoarmor:upgrade_crystal_netherite - turtle_egg @@ -409,7 +409,7 @@ exotic: crystal-lore: - "&8Drop this onto an armor piece" - "&8to set its tier to:" - - "&6&k!!&r <\$#f79d00>&lEXOTIC<\$#64f38c>&r &6&k!!&r" + - "&6&k!!&r &lEXOTIC&r &6&k!!&r" properties: helmet: armor: 3 From e02241b740a131b3e80a061e798065c4c2306333 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 20:17:11 +0000 Subject: [PATCH 32/35] Prevented sets.yml and tiers.yml from updating --- build.gradle | 2 +- .../main/java/com/willfp/ecoarmor/config/configs/Sets.java | 6 +++--- .../main/java/com/willfp/ecoarmor/config/configs/Tiers.java | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 11046e3..e8d1009 100644 --- a/build.gradle +++ b/build.gradle @@ -47,7 +47,7 @@ allprojects { } dependencies { - compileOnly 'com.willfp:eco:3.1.0' + compileOnly 'com.willfp:eco:3.2.0' compileOnly 'org.jetbrains:annotations:19.0.0' diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Sets.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Sets.java index 1adfcf6..f63ab98 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Sets.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Sets.java @@ -1,13 +1,13 @@ package com.willfp.ecoarmor.config.configs; -import com.willfp.eco.util.config.BaseConfig; +import com.willfp.eco.util.config.StaticBaseConfig; import com.willfp.ecoarmor.EcoArmorPlugin; -public class Sets extends BaseConfig { +public class Sets extends StaticBaseConfig { /** * sets.yml. */ public Sets() { - super("sets", false, EcoArmorPlugin.getInstance()); + super("sets", EcoArmorPlugin.getInstance()); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Tiers.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Tiers.java index 9af88d9..db26649 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Tiers.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/configs/Tiers.java @@ -1,13 +1,13 @@ package com.willfp.ecoarmor.config.configs; -import com.willfp.eco.util.config.BaseConfig; +import com.willfp.eco.util.config.StaticBaseConfig; import com.willfp.ecoarmor.EcoArmorPlugin; -public class Tiers extends BaseConfig { +public class Tiers extends StaticBaseConfig { /** * sets.yml. */ public Tiers() { - super("tiers", false, EcoArmorPlugin.getInstance()); + super("tiers", EcoArmorPlugin.getInstance()); } } From e37612cff2387d9982e91ad11f70abd9c114f790 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Fri, 22 Jan 2021 21:00:53 +0000 Subject: [PATCH 33/35] Added amount option to /eagive --- .../ecoarmor/commands/CommandEagive.java | 100 +++++++++++++----- .../ecoarmor/commands/TabcompleterEagive.java | 57 ++++++++-- 2 files changed, 121 insertions(+), 36 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java index bb5f28d..c40d9eb 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java @@ -10,9 +10,11 @@ import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; public class CommandEagive extends AbstractCommand { @@ -51,14 +53,25 @@ public class CommandEagive extends AbstractCommand { return; } - String itemName = args.get(1); - if (!itemName.contains(":")) { + String fullItemKey = args.get(1); + + if (!fullItemKey.contains(":")) { sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); return; } + String[] fullItemSplit = fullItemKey.split(":"); + if (fullItemSplit.length == 1) { + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); + return; + } + String itemNamespace = fullItemSplit[0]; + String itemKey = fullItemSplit[1]; - if (itemName.split(":")[0].equals("set")) { - ArmorSet set = ArmorSets.getByName(itemName.split(":")[1]); + List items = new ArrayList<>(); + int amount = 1; + + if (itemKey.equalsIgnoreCase("set")) { + ArmorSet set = ArmorSets.getByName(itemKey); if (set == null) { sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); return; @@ -73,36 +86,53 @@ public class CommandEagive extends AbstractCommand { advanced = Boolean.parseBoolean(args.get(3)); } + if (args.size() >= 5) { + try { + amount = Integer.parseInt(args.get(4)); + } catch (NumberFormatException e) { + amount = 1; + } + } + if (args.size() >= 3) { ArmorSlot slot = ArmorSlot.getSlot(args.get(2)); - if (slot == null) { + if (slot == null && !args.get(2).equalsIgnoreCase("full")) { sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); return; } if (advanced) { - reciever.getInventory().addItem(set.getAdvancedItemStack(slot)); + if (slot != null) { + items.add(set.getAdvancedItemStack(slot)); + } else { + for (ArmorSlot slot2 : ArmorSlot.values()) { + items.add(set.getAdvancedItemStack(slot2)); + } + } } else { - reciever.getInventory().addItem(set.getItemStack(slot)); + if (slot != null) { + items.add(set.getItemStack(slot)); + } else { + for (ArmorSlot slot2 : ArmorSlot.values()) { + items.add(set.getItemStack(slot2)); + } + } + } + } else { + for (ArmorSlot slot : ArmorSlot.values()) { + if (advanced) { + items.add(set.getAdvancedItemStack(slot)); + } else { + items.add(set.getItemStack(slot)); + } } - return; } - - for (ArmorSlot slot : ArmorSlot.values()) { - if (advanced) { - reciever.getInventory().addItem(set.getAdvancedItemStack(slot)); - } else { - reciever.getInventory().addItem(set.getItemStack(slot)); - } - } - - return; } - if (itemName.split(":")[0].equals("crystal")) { - UpgradeCrystal crystal = UpgradeCrystal.getByName(itemName.split(":")[1]); + if (itemNamespace.equalsIgnoreCase("crystal")) { + UpgradeCrystal crystal = UpgradeCrystal.getByName(itemKey); if (crystal == null) { sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); return; @@ -111,13 +141,19 @@ public class CommandEagive extends AbstractCommand { String message = this.getPlugin().getLangYml().getMessage("give-success"); message = message.replace("%item%", crystal.getItemStack().getItemMeta().getDisplayName()).replace("%recipient%", reciever.getName()); sender.sendMessage(message); - reciever.getInventory().addItem(crystal.getItemStack()); + items.add(crystal.getItemStack()); - return; + if (args.size() >= 3) { + try { + amount = Integer.parseInt(args.get(2)); + } catch (NumberFormatException e) { + amount = 1; + } + } } - if (itemName.split(":")[0].equals("shard")) { - ArmorSet set = ArmorSets.getByName(itemName.split(":")[1]); + if (itemNamespace.equalsIgnoreCase("shard")) { + ArmorSet set = ArmorSets.getByName(itemKey); if (set == null) { sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); return; @@ -126,9 +162,21 @@ public class CommandEagive extends AbstractCommand { String message = this.getPlugin().getLangYml().getMessage("give-success"); message = message.replace("%item%", set.getAdvancementShardItem().getItemMeta().getDisplayName()).replace("%recipient%", reciever.getName()); sender.sendMessage(message); - reciever.getInventory().addItem(set.getAdvancementShardItem()); + items.add(set.getAdvancementShardItem()); - return; + if (args.size() >= 3) { + try { + amount = Integer.parseInt(args.get(2)); + } catch (NumberFormatException e) { + amount = 1; + } + } + } + + for (ItemStack item : items) { + for (int i = 0; i < amount; i++) { + reciever.getInventory().addItem(item); + } } sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java index c64e333..92efb8f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java @@ -21,10 +21,29 @@ import java.util.stream.Collectors; public class TabcompleterEagive extends AbstractTabCompleter { /** - * The cached enchantment names. + * The cached names. */ private static final List SET_NAMES = new ArrayList<>(); + /** + * The cached slots. + */ + private static final List SLOTS = new ArrayList<>(); + + /** + * The cached numbers. + */ + private static final List NUMBERS = Arrays.asList( + "1", + "2", + "3", + "4", + "5", + "10", + "32", + "64" + ); + /** * Instantiate a new tab-completer for /eagive. */ @@ -42,6 +61,8 @@ public class TabcompleterEagive extends AbstractTabCompleter { SET_NAMES.addAll(ArmorSets.values().stream().map(armorSet -> "set:" + armorSet.getName()).collect(Collectors.toList())); SET_NAMES.addAll(ArmorSets.values().stream().map(armorSet -> "shard:" + armorSet.getName()).collect(Collectors.toList())); SET_NAMES.addAll(UpgradeCrystal.values().stream().map(crystal -> "crystal:" + crystal.getTier()).collect(Collectors.toList())); + SLOTS.addAll(Arrays.stream(ArmorSlot.values()).map(slot -> slot.name().toLowerCase()).collect(Collectors.toList())); + SLOTS.add("full"); } /** @@ -73,18 +94,34 @@ public class TabcompleterEagive extends AbstractTabCompleter { return completions; } - if (args.size() == 3) { - StringUtil.copyPartialMatches(args.get(2), Arrays.stream(ArmorSlot.values()).map(slot -> slot.name().toLowerCase()).collect(Collectors.toList()), completions); + if (args.get(1).startsWith("set:")) { + if (args.size() == 3) { + StringUtil.copyPartialMatches(args.get(2), SLOTS, completions); - Collections.sort(completions); - return completions; - } + Collections.sort(completions); + return completions; + } - if (args.size() == 4) { - StringUtil.copyPartialMatches(args.get(3), Arrays.asList("true", "false"), completions); + if (args.size() == 4) { + StringUtil.copyPartialMatches(args.get(3), Arrays.asList("true", "false"), completions); - Collections.sort(completions); - return completions; + Collections.sort(completions); + return completions; + } + + if (args.size() == 5) { + StringUtil.copyPartialMatches(args.get(4), NUMBERS, completions); + + Collections.sort(completions); + return completions; + } + } else { + if (args.size() == 3) { + StringUtil.copyPartialMatches(args.get(2), NUMBERS, completions); + + Collections.sort(completions); + return completions; + } } return new ArrayList<>(0); From f6f2ded17a0b633ca38dc75a47f42d6a1da04e80 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Fri, 22 Jan 2021 21:02:28 +0000 Subject: [PATCH 34/35] Fixed updatable classes --- .../main/java/com/willfp/ecoarmor/EcoArmorPlugin.java | 2 -- .../java/com/willfp/ecoarmor/config/EcoArmorConfigs.java | 9 --------- 2 files changed, 11 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index fe56131..be17739 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -9,7 +9,6 @@ import com.willfp.eco.util.protocollib.AbstractPacketAdapter; import com.willfp.ecoarmor.commands.CommandEagive; import com.willfp.ecoarmor.commands.CommandEareload; import com.willfp.ecoarmor.commands.TabcompleterEagive; -import com.willfp.ecoarmor.config.EcoArmorConfigs; import com.willfp.ecoarmor.display.ArmorDisplay; import com.willfp.ecoarmor.effects.Effect; import com.willfp.ecoarmor.effects.Effects; @@ -141,7 +140,6 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { @Override public List> getUpdatableClasses() { return Arrays.asList( - EcoArmorConfigs.class, ArmorSets.class, TabcompleterEagive.class, UpgradeCrystal.class diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/EcoArmorConfigs.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/EcoArmorConfigs.java index 6659574..23cfd90 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/EcoArmorConfigs.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/config/EcoArmorConfigs.java @@ -1,6 +1,5 @@ package com.willfp.ecoarmor.config; -import com.willfp.eco.util.config.updating.annotations.ConfigUpdater; import com.willfp.ecoarmor.config.configs.Sets; import com.willfp.ecoarmor.config.configs.Tiers; import lombok.experimental.UtilityClass; @@ -17,12 +16,4 @@ public class EcoArmorConfigs { * tiers.yml. */ public static final Tiers TIERS = new Tiers(); - - /** - * Update all configs. - */ - @ConfigUpdater - public void updateConfigs() { - SETS.update(); - } } From 2886799fdc5688338175098fef4b30dca2309d1b Mon Sep 17 00:00:00 2001 From: Auxilor Date: Fri, 22 Jan 2021 21:21:27 +0000 Subject: [PATCH 35/35] Cleaned up eagive --- .../ecoarmor/commands/CommandEagive.java | 85 +++++++++---------- .../ecoarmor/commands/TabcompleterEagive.java | 2 - 2 files changed, 39 insertions(+), 48 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java index c40d9eb..44eab66 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/CommandEagive.java @@ -15,6 +15,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class CommandEagive extends AbstractCommand { @@ -70,7 +71,7 @@ public class CommandEagive extends AbstractCommand { List items = new ArrayList<>(); int amount = 1; - if (itemKey.equalsIgnoreCase("set")) { + if (itemNamespace.equalsIgnoreCase("set")) { ArmorSet set = ArmorSets.getByName(itemKey); if (set == null) { sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); @@ -82,6 +83,28 @@ public class CommandEagive extends AbstractCommand { sender.sendMessage(message); boolean advanced = false; + + List slots = new ArrayList<>(); + + if (args.size() >= 3) { + ArmorSlot slot = ArmorSlot.getSlot(args.get(2)); + + if (slot == null) { + if (!args.get(2).equalsIgnoreCase("full")) { + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); + return; + } + } + + if (slot == null) { + slots.addAll(Arrays.asList(ArmorSlot.values())); + } else { + slots.add(slot); + } + } else { + slots.addAll(Arrays.asList(ArmorSlot.values())); + } + if (args.size() >= 4) { advanced = Boolean.parseBoolean(args.get(3)); } @@ -89,45 +112,13 @@ public class CommandEagive extends AbstractCommand { if (args.size() >= 5) { try { amount = Integer.parseInt(args.get(4)); - } catch (NumberFormatException e) { - amount = 1; + } catch (NumberFormatException ignored) { + // do nothing } } - if (args.size() >= 3) { - ArmorSlot slot = ArmorSlot.getSlot(args.get(2)); - - if (slot == null && !args.get(2).equalsIgnoreCase("full")) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); - return; - } - - if (advanced) { - if (slot != null) { - items.add(set.getAdvancedItemStack(slot)); - } else { - for (ArmorSlot slot2 : ArmorSlot.values()) { - items.add(set.getAdvancedItemStack(slot2)); - } - } - } else { - if (slot != null) { - items.add(set.getItemStack(slot)); - } else { - for (ArmorSlot slot2 : ArmorSlot.values()) { - items.add(set.getItemStack(slot2)); - } - } - } - } else { - for (ArmorSlot slot : ArmorSlot.values()) { - if (advanced) { - items.add(set.getAdvancedItemStack(slot)); - } else { - items.add(set.getItemStack(slot)); - } - } - + for (ArmorSlot slot : slots) { + items.add(advanced ? set.getAdvancedItemStack(slot) : set.getItemStack(slot)); } } @@ -146,8 +137,8 @@ public class CommandEagive extends AbstractCommand { if (args.size() >= 3) { try { amount = Integer.parseInt(args.get(2)); - } catch (NumberFormatException e) { - amount = 1; + } catch (NumberFormatException ignored) { + // do nothing } } } @@ -167,18 +158,20 @@ public class CommandEagive extends AbstractCommand { if (args.size() >= 3) { try { amount = Integer.parseInt(args.get(2)); - } catch (NumberFormatException e) { - amount = 1; + } catch (NumberFormatException ignored) { + // do nothing } } } - for (ItemStack item : items) { - for (int i = 0; i < amount; i++) { - reciever.getInventory().addItem(item); - } + if (items.isEmpty()) { + sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); + return; } - sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); + for (ItemStack item : items) { + item.setAmount(amount); + reciever.getInventory().addItem(item); + } } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java index 92efb8f..ac0772f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/commands/TabcompleterEagive.java @@ -112,14 +112,12 @@ public class TabcompleterEagive extends AbstractTabCompleter { if (args.size() == 5) { StringUtil.copyPartialMatches(args.get(4), NUMBERS, completions); - Collections.sort(completions); return completions; } } else { if (args.size() == 3) { StringUtil.copyPartialMatches(args.get(2), NUMBERS, completions); - Collections.sort(completions); return completions; } }