mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-03-11 13:11:50 +01:00
New tier filter for /mi generate
This commit is contained in:
parent
1f83dc26bc
commit
6774a4cedf
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
||||
|
@ -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 + "'");
|
||||
}
|
||||
}
|
||||
|
@ -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 + "'");
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user