Added -tierset: to /mi generate tab arguments

This commit is contained in:
Indyuce 2022-08-01 15:21:01 +02:00
parent 6774a4cedf
commit cd4fe2d0e8

View File

@ -25,68 +25,68 @@ import java.util.Optional;
import java.util.Random; import java.util.Random;
public class GenerateCommandTreeNode extends CommandTreeNode { public class GenerateCommandTreeNode extends CommandTreeNode {
private static final Random random = new Random(); private static final Random random = new Random();
public GenerateCommandTreeNode(CommandTreeNode parent) { public GenerateCommandTreeNode(CommandTreeNode parent) {
super(parent, "generate"); super(parent, "generate");
addParameter(Parameter.PLAYER); addParameter(Parameter.PLAYER);
addParameter(new Parameter("(extra-args)", (explorer, list) -> list addParameter(new Parameter("(extra-args)", (explorer, list) -> list
.addAll(Arrays.asList("-matchlevel", "-matchclass", "-level:", "-class:", "-type:", "-id:", "-tier:", "-gimme")))); .addAll(Arrays.asList("-matchlevel", "-matchclass", "-level:", "-class:", "-type:", "-id:", "-tier:", "-tierset:", "-gimme"))));
} }
@Override @Override
public CommandResult execute(CommandSender sender, String[] args) { public CommandResult execute(CommandSender sender, String[] args) {
try { try {
if(args.length < 2) return CommandResult.THROW_USAGE; if (args.length < 2) return CommandResult.THROW_USAGE;
final Player target = Bukkit.getPlayer(args[1]); final Player target = Bukkit.getPlayer(args[1]);
Validate.notNull(target, "Could not find player called " + args[1] + "."); Validate.notNull(target, "Could not find player called " + args[1] + ".");
GenerateCommandHandler handler = new GenerateCommandHandler(args); GenerateCommandHandler handler = new GenerateCommandHandler(args);
final Player give = handler.hasArgument("gimme") || handler.hasArgument("giveme") ? (sender instanceof Player ? (Player) sender : null) final Player give = handler.hasArgument("gimme") || handler.hasArgument("giveme") ? (sender instanceof Player ? (Player) sender : null)
: target; : target;
Validate.notNull(give, "You cannot use -gimme"); Validate.notNull(give, "You cannot use -gimme");
final RPGPlayer rpgPlayer = PlayerData.get(target).getRPG(); final RPGPlayer rpgPlayer = PlayerData.get(target).getRPG();
final int itemLevel = handler.hasArgument("level") ? Integer.parseInt(handler.getValue("level")) final int itemLevel = handler.hasArgument("level") ? Integer.parseInt(handler.getValue("level"))
: (handler.hasArgument("matchlevel") ? MMOItems.plugin.getTemplates().rollLevel(rpgPlayer.getLevel()) : 1 + random.nextInt(100)); : (handler.hasArgument("matchlevel") ? MMOItems.plugin.getTemplates().rollLevel(rpgPlayer.getLevel()) : 1 + random.nextInt(100));
final @Nullable ItemTier itemTier = handler.hasArgument("tierset") ? null : handler.hasArgument("tier") final @Nullable ItemTier itemTier = handler.hasArgument("tierset") ? null : handler.hasArgument("tier")
? MMOItems.plugin.getTiers().getOrThrow(handler.getValue("tier").toUpperCase().replace("-", "_")) ? MMOItems.plugin.getTiers().getOrThrow(handler.getValue("tier").toUpperCase().replace("-", "_"))
: MMOItems.plugin.getTemplates().rollTier(); : MMOItems.plugin.getTemplates().rollTier();
final TemplateExplorer builder = new TemplateExplorer(); final TemplateExplorer builder = new TemplateExplorer();
if (handler.hasArgument("matchclass")) if (handler.hasArgument("matchclass"))
builder.applyFilter(new ClassFilter(rpgPlayer)); builder.applyFilter(new ClassFilter(rpgPlayer));
if (handler.hasArgument("class")) if (handler.hasArgument("class"))
builder.applyFilter(new ClassFilter(handler.getValue("class").replace("-", " ").replace("_", " "))); builder.applyFilter(new ClassFilter(handler.getValue("class").replace("-", " ").replace("_", " ")));
String type = null; String type = null;
if (handler.hasArgument("tierset")) { if (handler.hasArgument("tierset")) {
String format = UtilityMethods.enumName(handler.getValue("tierset")); String format = UtilityMethods.enumName(handler.getValue("tierset"));
Validate.isTrue(MMOItems.plugin.getTiers().has(format), "Could not find tier with ID '" + format + "'"); Validate.isTrue(MMOItems.plugin.getTiers().has(format), "Could not find tier with ID '" + format + "'");
builder.applyFilter(new TierFilter(format)); builder.applyFilter(new TierFilter(format));
} }
if (handler.hasArgument("type")) { if (handler.hasArgument("type")) {
type = handler.getValue("type"); type = handler.getValue("type");
Validate.isTrue(Type.isValid(type), "Could not find type with ID '" + type + "'"); Validate.isTrue(Type.isValid(type), "Could not find type with ID '" + type + "'");
builder.applyFilter(new TypeFilter(Type.get(type))); builder.applyFilter(new TypeFilter(Type.get(type)));
} }
if (handler.hasArgument("id")) { if (handler.hasArgument("id")) {
Validate.isTrue(type != null, "You have to specify a type if using the id option!"); Validate.isTrue(type != null, "You have to specify a type if using the id option!");
builder.applyFilter(new IDFilter(handler.getValue("id"))); builder.applyFilter(new IDFilter(handler.getValue("id")));
} }
Optional<MMOItemTemplate> optional = builder.rollLoot(); Optional<MMOItemTemplate> optional = builder.rollLoot();
Validate.isTrue(optional.isPresent(), "No item matched your criterias."); Validate.isTrue(optional.isPresent(), "No item matched your criterias.");
ItemStack item = optional.get().newBuilder(itemLevel, itemTier).build().newBuilder().build(); ItemStack item = optional.get().newBuilder(itemLevel, itemTier).build().newBuilder().build();
Validate.isTrue(item != null && item.getType() != Material.AIR, "Could not generate item with ID '" + optional.get().getId() + "'"); Validate.isTrue(item != null && item.getType() != Material.AIR, "Could not generate item with ID '" + optional.get().getId() + "'");
new SmartGive(give).give(item); new SmartGive(give).give(item);
return CommandResult.SUCCESS; return CommandResult.SUCCESS;
} catch (IllegalArgumentException exception) { } catch (IllegalArgumentException exception) {
sender.sendMessage(ChatColor.RED + exception.getMessage()); sender.sendMessage(ChatColor.RED + exception.getMessage());
return CommandResult.FAILURE; return CommandResult.FAILURE;
} }
} }
} }