New tier filter for /mi generate

This commit is contained in:
Indyuce 2022-08-01 15:20:28 +02:00
parent 1f83dc26bc
commit 6774a4cedf
7 changed files with 100 additions and 45 deletions

View File

@ -7,6 +7,9 @@ import net.Indyuce.mmoitems.stat.data.StringListData;
import java.util.function.Predicate;
/**
* Filters items with a specific class
*/
public class ClassFilter implements Predicate<MMOItemTemplate> {
private final String name;

View File

@ -4,6 +4,9 @@ import java.util.function.Predicate;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
/**
* Filters items with a specific ID
*/
public class IDFilter implements Predicate<MMOItemTemplate> {
private final String id;

View File

@ -0,0 +1,30 @@
package net.Indyuce.mmoitems.api.item.template.explorer;
import net.Indyuce.mmoitems.ItemStats;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
import net.Indyuce.mmoitems.stat.data.random.RandomStatData;
import javax.annotation.Nullable;
import java.util.function.Predicate;
/**
* Filters items with a specific tier.
* <p>
* The 'tier:COMMON' has the effect of setting the item tier
* to a specific tier. What that filter does is that it lets
* the user select GROUPS of items, and these groups correspond
* to tiers; these are two different and possible uses for tiers.
*/
public class TierFilter implements Predicate<MMOItemTemplate> {
private final String id;
public TierFilter(String id) {
this.id = id;
}
@Override
public boolean test(MMOItemTemplate template) {
final @Nullable RandomStatData found = template.getBaseItemData().get(ItemStats.TIER);
return found != null && found.toString().equalsIgnoreCase(id);
}
}

View File

@ -5,6 +5,9 @@ import java.util.function.Predicate;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
/**
* Filters items with a specific type
*/
public class TypeFilter implements Predicate<MMOItemTemplate> {
private final Type type;

View File

@ -4,25 +4,25 @@ import java.util.HashSet;
import java.util.Set;
public class GenerateCommandHandler {
private final Set<String> arguments = new HashSet<>();
private final Set<String> arguments = new HashSet<>();
public GenerateCommandHandler(String... args) {
for (String arg : args)
arguments.add(arg.toLowerCase());
}
public GenerateCommandHandler(String... args) {
for (String arg : args)
arguments.add(arg.toLowerCase());
}
public boolean hasArgument(String key) {
for (String argument : arguments)
if (argument.startsWith("-" + key))
return true;
return false;
}
public boolean hasArgument(String key) {
for (String argument : arguments)
if (argument.startsWith("-" + key + ":"))
return true;
return false;
}
public String getValue(String key) {
for (String argument : arguments)
if (argument.startsWith("-" + key + ":"))
return argument.substring(key.length() + 2);
public String getValue(String key) {
for (String argument : arguments)
if (argument.startsWith("-" + key + ":"))
return argument.substring(key.length() + 2);
throw new IllegalArgumentException("Command has no argument '" + key + "'");
}
throw new IllegalArgumentException("Command has no argument '" + key + "'");
}
}

View File

@ -1,9 +1,16 @@
package net.Indyuce.mmoitems.command.mmoitems;
import java.util.Arrays;
import java.util.Optional;
import java.util.Random;
import io.lumine.mythic.lib.UtilityMethods;
import io.lumine.mythic.lib.api.util.SmartGive;
import io.lumine.mythic.lib.command.api.CommandTreeNode;
import io.lumine.mythic.lib.command.api.Parameter;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
import net.Indyuce.mmoitems.api.item.template.explorer.*;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.api.player.RPGPlayer;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -12,19 +19,10 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
import net.Indyuce.mmoitems.api.item.template.explorer.ClassFilter;
import net.Indyuce.mmoitems.api.item.template.explorer.IDFilter;
import net.Indyuce.mmoitems.api.item.template.explorer.TemplateExplorer;
import net.Indyuce.mmoitems.api.item.template.explorer.TypeFilter;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.api.player.RPGPlayer;
import io.lumine.mythic.lib.api.util.SmartGive;
import io.lumine.mythic.lib.command.api.CommandTreeNode;
import io.lumine.mythic.lib.command.api.Parameter;
import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.Optional;
import java.util.Random;
public class GenerateCommandTreeNode extends CommandTreeNode {
private static final Random random = new Random();
@ -50,19 +48,24 @@ public class GenerateCommandTreeNode extends CommandTreeNode {
: target;
Validate.notNull(give, "You cannot use -gimme");
RPGPlayer rpgPlayer = PlayerData.get(target).getRPG();
final RPGPlayer rpgPlayer = PlayerData.get(target).getRPG();
final int itemLevel = handler.hasArgument("level") ? Integer.parseInt(handler.getValue("level"))
: (handler.hasArgument("matchlevel") ? MMOItems.plugin.getTemplates().rollLevel(rpgPlayer.getLevel()) : 1 + random.nextInt(100));
final ItemTier itemTier = 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.getTemplates().rollTier();
TemplateExplorer builder = new TemplateExplorer();
final TemplateExplorer builder = new TemplateExplorer();
if (handler.hasArgument("matchclass"))
builder.applyFilter(new ClassFilter(rpgPlayer));
if (handler.hasArgument("class"))
builder.applyFilter(new ClassFilter(handler.getValue("class").replace("-", " ").replace("_", " ")));
String type = null;
if (handler.hasArgument("tierset")) {
String format = UtilityMethods.enumName(handler.getValue("tierset"));
Validate.isTrue(MMOItems.plugin.getTiers().has(format), "Could not find tier with ID '" + format + "'");
builder.applyFilter(new TierFilter(format));
}
if (handler.hasArgument("type")) {
type = handler.getValue("type");
Validate.isTrue(Type.isValid(type), "Could not find type with ID '" + type + "'");

View File

@ -1,23 +1,25 @@
package net.Indyuce.mmoitems.comp.mmocore.load;
import java.util.Optional;
import net.Indyuce.mmoitems.ItemStats;
import net.Indyuce.mmoitems.api.player.PlayerData;
import org.apache.commons.lang.Validate;
import org.bukkit.inventory.ItemStack;
import io.lumine.mythic.lib.UtilityMethods;
import io.lumine.mythic.lib.api.MMOLineConfig;
import net.Indyuce.mmocore.loot.LootBuilder;
import net.Indyuce.mmoitems.ItemStats;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.ItemTier;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.api.item.template.MMOItemTemplate;
import net.Indyuce.mmoitems.api.item.template.explorer.ClassFilter;
import net.Indyuce.mmoitems.api.item.template.explorer.TemplateExplorer;
import net.Indyuce.mmoitems.api.item.template.explorer.TierFilter;
import net.Indyuce.mmoitems.api.item.template.explorer.TypeFilter;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.api.player.RPGPlayer;
import net.Indyuce.mmoitems.stat.data.SoulboundData;
import io.lumine.mythic.lib.api.MMOLineConfig;
import org.apache.commons.lang.Validate;
import org.bukkit.inventory.ItemStack;
import java.util.Optional;
public class RandomItemDropItem extends ItemGenerationDropItem {
@ -25,6 +27,7 @@ public class RandomItemDropItem extends ItemGenerationDropItem {
private final boolean matchClass;
private final String profess;
private final Type type;
private final ItemTier tier;
public RandomItemDropItem(MMOLineConfig config) {
super(config);
@ -38,6 +41,13 @@ public class RandomItemDropItem extends ItemGenerationDropItem {
type = MMOItems.plugin.getTypes().get(format);
} else
type = null;
if (config.contains("tierset")) {
String format = UtilityMethods.enumName(config.getString("tierset"));
Validate.isTrue(MMOItems.plugin.getTiers().has(format), "Could not find item tier");
tier = MMOItems.plugin.getTiers().get(format);
} else
tier = null;
}
@Override
@ -53,6 +63,9 @@ public class RandomItemDropItem extends ItemGenerationDropItem {
if (type != null)
explorer.applyFilter(new TypeFilter(type));
if (tier != null)
explorer.applyFilter(new TierFilter(tier.getId()));
Optional<MMOItemTemplate> optional = explorer.rollLoot();
if (!optional.isPresent())
return;