From 22b6e79afcda658595b009ac11e6d23cbf6cea6c Mon Sep 17 00:00:00 2001 From: Auxilor Date: Thu, 20 May 2021 21:34:47 +0100 Subject: [PATCH] Added rarity option to /giverandombook --- .../commands/CommandGiverandombook.java | 16 ++++- .../TabCompleterGiverandombook.java | 72 +++++++++++++++++++ 2 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/tabcompleters/TabCompleterGiverandombook.java diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/commands/CommandGiverandombook.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/commands/CommandGiverandombook.java index d8ecbbc5..69430fbf 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/commands/CommandGiverandombook.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/commands/CommandGiverandombook.java @@ -4,9 +4,10 @@ import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.command.AbstractCommand; import com.willfp.eco.core.command.AbstractTabCompleter; import com.willfp.eco.util.NumberUtils; -import com.willfp.ecoenchants.command.tabcompleters.TabCompleterRandomEnchant; +import com.willfp.ecoenchants.command.tabcompleters.TabCompleterGiverandombook; import com.willfp.ecoenchants.display.EnchantmentCache; import com.willfp.ecoenchants.enchantments.EcoEnchant; +import com.willfp.ecoenchants.enchantments.meta.EnchantmentRarity; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.CommandSender; @@ -32,7 +33,7 @@ public class CommandGiverandombook extends AbstractCommand { @Override public AbstractTabCompleter getTab() { - return new TabCompleterRandomEnchant(this); + return new TabCompleterGiverandombook(this); } @Override @@ -44,6 +45,8 @@ public class CommandGiverandombook extends AbstractCommand { } Player player = Bukkit.getServer().getPlayer(args.get(0)); + EnchantmentRarity rarity = args.size() >= 2 ? EnchantmentRarity.getByName(args.get(1).toLowerCase()) : null; + if (player == null) { sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-player")); return; @@ -51,11 +54,20 @@ public class CommandGiverandombook extends AbstractCommand { ItemStack itemStack = new ItemStack(Material.ENCHANTED_BOOK); EnchantmentStorageMeta meta = (EnchantmentStorageMeta) itemStack.getItemMeta(); + List allowed = Arrays.stream(Enchantment.values()).filter(enchantment -> { if (enchantment instanceof EcoEnchant) { return ((EcoEnchant) enchantment).isEnabled(); } return true; + }).filter(enchantment -> { + if (rarity != null) { + if (!(enchantment instanceof EcoEnchant)) { + return false; + } + return ((EcoEnchant) enchantment).getRarity().equals(rarity); + } + return true; }).collect(Collectors.toList()); Enchantment enchantment = allowed.get(NumberUtils.randInt(0, allowed.size() - 1)); int level = NumberUtils.randInt(1, enchantment.getMaxLevel()); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/tabcompleters/TabCompleterGiverandombook.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/tabcompleters/TabCompleterGiverandombook.java new file mode 100644 index 00000000..b0b1b0de --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/command/tabcompleters/TabCompleterGiverandombook.java @@ -0,0 +1,72 @@ +package com.willfp.ecoenchants.command.tabcompleters; + +import com.willfp.eco.core.command.AbstractCommand; +import com.willfp.eco.core.command.AbstractTabCompleter; +import com.willfp.eco.core.config.ConfigUpdater; +import com.willfp.ecoenchants.enchantments.meta.EnchantmentRarity; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.util.StringUtil; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class TabCompleterGiverandombook extends AbstractTabCompleter { + /** + * The cached enchantment names. + */ + private static final List RARITY_NAMES = EnchantmentRarity.values().stream().map(EnchantmentRarity::getName).collect(Collectors.toList()); + + /** + * Instantiate a new tab-completer for /enchantinfo. + * + * @param command /enchantinfo. + */ + public TabCompleterGiverandombook(@NotNull final AbstractCommand command) { + super(command); + } + + /** + * Called on /ecoreload. + */ + @ConfigUpdater + public static void reload() { + RARITY_NAMES.clear(); + RARITY_NAMES.addAll(EnchantmentRarity.values().stream().map(EnchantmentRarity::getName).collect(Collectors.toList())); + } + + /** + * The execution of the tabcompleter. + * + * @param sender The sender of the command. + * @param args The arguments of the command. + * @return A list of tab-completions. + */ + @Override + public List onTab(@NotNull final CommandSender sender, + @NotNull final List args) { + List completions = new ArrayList<>(); + + List playerNames = Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()); + + if (args.isEmpty()) { + // Currently, this case is not ever reached + return playerNames; + } + + if (args.size() == 1) { + StringUtil.copyPartialMatches(String.join(" ", args.get(0)), playerNames, completions); + } + + if (args.size() == 2) { + StringUtil.copyPartialMatches(String.join(" ", args.get(1)), RARITY_NAMES, completions); + } + + Collections.sort(completions); + return completions; + } +}