diff --git a/src/main/java/net/Indyuce/mmocore/command/api/Parameter.java b/src/main/java/net/Indyuce/mmocore/command/api/Parameter.java index 043cddee..d7d9e005 100644 --- a/src/main/java/net/Indyuce/mmocore/command/api/Parameter.java +++ b/src/main/java/net/Indyuce/mmocore/command/api/Parameter.java @@ -12,13 +12,13 @@ public class Parameter { // private final ParameterType type;ParameterType type, private final Consumer> autoComplete; - public static final Parameter PROFESSION = new Parameter("", (list) -> { + public static final Parameter PROFESSION = new Parameter("", list -> { MMOCore.plugin.professionManager.getAll().forEach(profession -> list.add(profession.getId())); list.add("main"); }); - public static final Parameter PLAYER = new Parameter("", (list) -> Bukkit.getOnlinePlayers().forEach(online -> list.add(online.getName()))); - public static final Parameter PLAYER_OPTIONAL = new Parameter("(player)", (list) -> Bukkit.getOnlinePlayers().forEach(online -> list.add(online.getName()))); - public static final Parameter AMOUNT = new Parameter("", (list) -> { + public static final Parameter PLAYER = new Parameter("", list -> Bukkit.getOnlinePlayers().forEach(online -> list.add(online.getName()))); + public static final Parameter PLAYER_OPTIONAL = new Parameter("(player)", list -> Bukkit.getOnlinePlayers().forEach(online -> list.add(online.getName()))); + public static final Parameter AMOUNT = new Parameter("", list -> { for (int j = 0; j <= 10; j++) list.add("" + j); }); diff --git a/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ExperienceCommandMap.java b/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ExperienceCommandMap.java index c349d82e..3e24bb37 100644 --- a/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ExperienceCommandMap.java +++ b/src/main/java/net/Indyuce/mmocore/command/rpg/admin/ExperienceCommandMap.java @@ -1,5 +1,7 @@ package net.Indyuce.mmocore.command.rpg.admin; +import java.util.function.BiConsumer; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -8,6 +10,7 @@ import org.bukkit.entity.Player; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.experience.Profession; import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.api.player.Professions; import net.Indyuce.mmocore.command.api.CommandEnd; import net.Indyuce.mmocore.command.api.CommandMap; import net.Indyuce.mmocore.command.api.Parameter; @@ -16,47 +19,71 @@ public class ExperienceCommandMap extends CommandEnd { public ExperienceCommandMap(CommandMap parent) { super(parent, "exp"); - addParameter(Parameter.PLAYER); - addParameter(Parameter.PROFESSION); - addParameter(Parameter.AMOUNT); + addFloor(new ActionCommandMap(this, "set", (data, value) -> data.setExperience(value), (professions, profession, value) -> professions.setExperience(profession, value))); + addFloor(new ActionCommandMap(this, "give", (data, value) -> data.giveExperience(value), (professions, profession, value) -> professions.giveExperience(profession, value))); + } + + public class ActionCommandMap extends CommandEnd { + private final BiConsumer main; + private final TriConsumer profession; + + public ActionCommandMap(CommandMap parent, String type, BiConsumer main, TriConsumer profession) { + super(parent, type); + + this.main = main; + this.profession = profession; + + addParameter(Parameter.PLAYER); + addParameter(Parameter.PROFESSION); + addParameter(Parameter.AMOUNT); + } + + @Override + public CommandResult execute(CommandSender sender, String[] args) { + if (args.length < 6) + return CommandResult.THROW_USAGE; + + Player player = Bukkit.getPlayer(args[3]); + if (player == null) { + sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); + return CommandResult.FAILURE; + } + + int amount = 0; + try { + amount = Integer.parseInt(args[5]); + } catch (NumberFormatException exception) { + sender.sendMessage(ChatColor.RED + args[5] + " is not a valid number."); + return CommandResult.FAILURE; + } + + PlayerData data = PlayerData.get(player); + if (args[4].equalsIgnoreCase("main")) { + main.accept(data, amount); + sender.sendMessage(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " now has " + ChatColor.GOLD + data.getExperience() + ChatColor.YELLOW + " EXP."); + return CommandResult.SUCCESS; + } + + String format = args[4].toLowerCase().replace("_", "-"); + if (!MMOCore.plugin.professionManager.has(format)) { + sender.sendMessage(ChatColor.RED + format + " is not a valid profession."); + return CommandResult.FAILURE; + } + + Profession profession = MMOCore.plugin.professionManager.get(format); + this.profession.accept(data.getCollectionSkills(), profession, amount); + sender.sendMessage(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " now has " + ChatColor.GOLD + data.getCollectionSkills().getExperience(profession) + ChatColor.YELLOW + " EXP in " + profession.getName() + "."); + return CommandResult.SUCCESS; + } + } + + @FunctionalInterface + interface TriConsumer { + void accept(A a, B b, C c); } @Override public CommandResult execute(CommandSender sender, String[] args) { - if (args.length < 5) - return CommandResult.THROW_USAGE; - - Player player = Bukkit.getPlayer(args[2]); - if (player == null) { - sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[2] + "."); - return CommandResult.FAILURE; - } - - int amount; - try { - amount = Integer.parseInt(args[4]); - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + args[4] + " is not a valid number."); - return CommandResult.FAILURE; - } - - if (args[3].equalsIgnoreCase("main")) { - PlayerData data = PlayerData.get(player); - data.giveExperience(amount); - sender.sendMessage(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " now has " + ChatColor.GOLD + data.getExperience() + ChatColor.YELLOW + " EXP."); - return CommandResult.SUCCESS; - } - - String format = args[3].toLowerCase().replace("_", "-"); - if (!MMOCore.plugin.professionManager.has(format)) { - sender.sendMessage(ChatColor.RED + format + " is not a valid profession."); - return CommandResult.FAILURE; - } - - Profession profession = MMOCore.plugin.professionManager.get(format); - PlayerData data = PlayerData.get(player); - data.getCollectionSkills().giveExperience(profession, amount); - sender.sendMessage(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " now has " + ChatColor.GOLD + data.getCollectionSkills().getExperience(profession) + ChatColor.YELLOW + " EXP in " + profession.getName() + "."); - return CommandResult.SUCCESS; + return CommandResult.THROW_USAGE; } } diff --git a/src/main/java/net/Indyuce/mmocore/command/rpg/admin/LevelCommandMap.java b/src/main/java/net/Indyuce/mmocore/command/rpg/admin/LevelCommandMap.java index 2471869e..1421e2e8 100644 --- a/src/main/java/net/Indyuce/mmocore/command/rpg/admin/LevelCommandMap.java +++ b/src/main/java/net/Indyuce/mmocore/command/rpg/admin/LevelCommandMap.java @@ -1,5 +1,7 @@ package net.Indyuce.mmocore.command.rpg.admin; +import java.util.function.BiConsumer; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -8,61 +10,80 @@ import org.bukkit.entity.Player; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.experience.Profession; import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.api.player.Professions; import net.Indyuce.mmocore.command.api.CommandEnd; import net.Indyuce.mmocore.command.api.CommandMap; import net.Indyuce.mmocore.command.api.Parameter; -public class LevelCommandMap extends CommandEnd { +public class LevelCommandMap extends CommandMap { public LevelCommandMap(CommandMap parent) { super(parent, "level"); - addParameter(Parameter.PLAYER); - addParameter(Parameter.PROFESSION); - addParameter(Parameter.AMOUNT); + addFloor(new ActionCommandMap(this, "set", (data, value) -> data.setLevel(value), (professions, profession, value) -> professions.setLevel(profession, value))); + addFloor(new ActionCommandMap(this, "give", (data, value) -> data.giveLevels(value), (professions, profession, value) -> professions.giveLevels(profession, value))); + } + + public class ActionCommandMap extends CommandEnd { + private final BiConsumer main; + private final TriConsumer profession; + + public ActionCommandMap(CommandMap parent, String type, BiConsumer main, TriConsumer profession) { + super(parent, type); + + this.main = main; + this.profession = profession; + + addParameter(Parameter.PLAYER); + addParameter(Parameter.PROFESSION); + addParameter(Parameter.AMOUNT); + } + + @Override + public CommandResult execute(CommandSender sender, String[] args) { + if (args.length < 6) + return CommandResult.THROW_USAGE; + + Player player = Bukkit.getPlayer(args[3]); + if (player == null) { + sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[3] + "."); + return CommandResult.FAILURE; + } + + int amount = 0; + try { + amount = Integer.parseInt(args[5]); + } catch (NumberFormatException exception) { + sender.sendMessage(ChatColor.RED + args[5] + " is not a valid number."); + return CommandResult.FAILURE; + } + + PlayerData data = PlayerData.get(player); + if (args[4].equalsIgnoreCase("main")) { + main.accept(data, amount); + sender.sendMessage(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " is now Lvl " + ChatColor.GOLD + data.getLevel() + ChatColor.YELLOW + "."); + return CommandResult.SUCCESS; + } + + String format = args[4].toLowerCase().replace("_", "-"); + if (!MMOCore.plugin.professionManager.has(format)) { + sender.sendMessage(ChatColor.RED + format + " is not a valid profession."); + return CommandResult.FAILURE; + } + + Profession profession = MMOCore.plugin.professionManager.get(format); + this.profession.accept(data.getCollectionSkills(), profession, amount); + sender.sendMessage(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " is now Lvl " + ChatColor.GOLD + data.getCollectionSkills().getLevel(profession) + ChatColor.YELLOW + " in " + profession.getName() + "."); + return CommandResult.SUCCESS; + } + } + + @FunctionalInterface + interface TriConsumer { + void accept(A a, B b, C c); } @Override public CommandResult execute(CommandSender sender, String[] args) { - if (args.length < 5) - return CommandResult.THROW_USAGE; - - Player player = Bukkit.getPlayer(args[2]); - if (player == null) { - sender.sendMessage(ChatColor.RED + "Could not find the player called " + args[2] + "."); - return CommandResult.FAILURE; - } - - int amount = 0; - try { - amount = Integer.parseInt(args[4]); - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + args[4] + " is not a valid number."); - return CommandResult.FAILURE; - } - - if (args[3].equalsIgnoreCase("main")) { - PlayerData data = PlayerData.get(player); - - int total = 0; - while (amount-- > 0) - total += MMOCore.plugin.configManager.getNeededExperience(data.getLevel() + amount + 1); - data.giveExperience(total); - - sender.sendMessage(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " is now Lvl " + ChatColor.GOLD + data.getLevel() + ChatColor.YELLOW + "."); - return CommandResult.SUCCESS; - } - - String format = args[3].toLowerCase().replace("_", "-"); - if (!MMOCore.plugin.professionManager.has(format)) { - sender.sendMessage(ChatColor.RED + format + " is not a valid profession."); - return CommandResult.FAILURE; - } - - Profession profession = MMOCore.plugin.professionManager.get(format); - PlayerData data = PlayerData.get(player); - while (amount-- > 0) - data.getCollectionSkills().giveExperience(profession, MMOCore.plugin.configManager.getNeededExperience(data.getCollectionSkills().getLevel(profession) + 1)); - sender.sendMessage(ChatColor.GOLD + player.getName() + ChatColor.YELLOW + " is now Lvl " + ChatColor.GOLD + data.getCollectionSkills().getLevel(profession) + ChatColor.YELLOW + " in " + profession.getName() + "."); - return CommandResult.SUCCESS; + return CommandResult.THROW_USAGE; } }