Skip to content

Commit

Permalink
Rewrote the entire command system. Added importing and exporting to a…
Browse files Browse the repository at this point in the history
…nd from YAML into the storage type specified in the config for moving to and from MySQL. Finished adding MySQL.
  • Loading branch information
Xemorr committed Jun 5, 2021
1 parent a57acfc commit 6dc74a5
Show file tree
Hide file tree
Showing 20 changed files with 416 additions and 100 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>me.xemor</groupId>
<artifactId>Superheroes2</artifactId>
<version>2.3.0</version>
<version>2.4.0</version>
<packaging>jar</packaging>

<name>Superheroes2</name>
Expand Down
12 changes: 4 additions & 8 deletions src/main/java/me/xemor/superheroes2/Superheroes2.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package me.xemor.superheroes2;

import me.xemor.superheroes2.commands.HeroCMD;
import me.xemor.superheroes2.commands.Reload;
import me.xemor.superheroes2.commands.HeroCommand;
import me.xemor.superheroes2.commands.Reroll;
import me.xemor.superheroes2.data.ConfigHandler;
import me.xemor.superheroes2.data.HeroHandler;
Expand Down Expand Up @@ -36,16 +35,13 @@ public void onEnable() {
heroHandler = new HeroHandler(this, configHandler);
registerSkills();
Reroll reroll = new Reroll(heroHandler, configHandler);
Reload reload = new Reload(heroHandler, configHandler);
this.getCommand("heroreload").setExecutor(reload);
this.getServer().getPluginManager().registerEvents(reroll, this);
this.getServer().getPluginManager().registerEvents(this, this);
this.getServer().getPluginManager().registerEvents(heroHandler, this);
HeroCMD heroCMD = new HeroCMD(heroHandler, configHandler);
HeroCommand heroCommand = new HeroCommand(heroHandler, reroll);
PluginCommand command = this.getCommand("hero");
command.setExecutor(heroCMD);
command.setTabCompleter(heroCMD);
this.getCommand("reroll").setExecutor(reroll);
command.setExecutor(heroCommand);
command.setTabCompleter(heroCommand);
handleMetrics();
checkForNewUpdate();
bukkitAudiences = BukkitAudiences.create(this);
Expand Down
44 changes: 44 additions & 0 deletions src/main/java/me/xemor/superheroes2/commands/Export.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package me.xemor.superheroes2.commands;

import de.themoep.minedown.adventure.MineDown;
import me.xemor.superheroes2.Superheroes2;
import me.xemor.superheroes2.data.ConfigHandler;
import me.xemor.superheroes2.data.HeroHandler;
import net.kyori.adventure.audience.Audience;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;

import java.util.List;

public class Export implements SubCommand {

private final String exporting = ChatColor.translateAlternateColorCodes('&', "&aExporting...");
private final String done = ChatColor.translateAlternateColorCodes('&', "&aDone!");
private HeroHandler heroHandler;
private ConfigHandler configHandler;

public Export(HeroHandler heroHandler, ConfigHandler configHandler) {
this.heroHandler = heroHandler;
this.configHandler = configHandler;
}

@Override
public void onCommand(CommandSender sender, String[] args) {
if (sender.hasPermission("superheroes.export")) {
sender.sendMessage(exporting);
heroHandler.exportFiles();
configHandler.reloadConfig(heroHandler);
sender.sendMessage(done);
}
else {
Audience audience = Superheroes2.getBukkitAudiences().sender(sender);
audience.sendMessage(MineDown.parse(configHandler.getNoPermissionMessage()));
}
}

@Override
public List<String> tabComplete(CommandSender sender, String[] args) {
return null;
}

}
88 changes: 88 additions & 0 deletions src/main/java/me/xemor/superheroes2/commands/HeroCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package me.xemor.superheroes2.commands;

import de.themoep.minedown.adventure.MineDown;
import me.xemor.superheroes2.Superheroes2;
import me.xemor.superheroes2.data.ConfigHandler;
import me.xemor.superheroes2.data.HeroHandler;
import net.kyori.adventure.audience.Audience;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.List;

public class HeroCommand implements CommandExecutor, TabExecutor {

private HeroHandler heroHandler;
private ConfigHandler configHandler;
private HeroSelect heroSelectCommand;
private Reload reloadCommand;
private Import importCommand;
private Export exportCommand;
private Reroll reroll;

public HeroCommand(HeroHandler heroHandler, Reroll reroll) {
this.heroHandler = heroHandler;
this.reroll = reroll;
configHandler = heroHandler.getPlugin().getConfigHandler();
reloadCommand = new Reload(heroHandler, configHandler);
heroSelectCommand = new HeroSelect(heroHandler, configHandler);
importCommand = new Import(heroHandler, configHandler);
exportCommand = new Export(heroHandler, configHandler);
}

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length >= 1) {
Audience audience = Superheroes2.getBukkitAudiences().sender(sender);
SubCommands commandType;
try {
commandType = SubCommands.valueOf(args[0].toUpperCase());
} catch(IllegalArgumentException e) {
audience.sendMessage(MineDown.parse(configHandler.getInvalidCommandMessage(), "name", sender.getName()));
return true;
}
switch (commandType) {
case SELECT: heroSelectCommand.onCommand(sender, args); break;
case RELOAD: reloadCommand.onCommand(sender, args); break;
case REROLL: reroll.onCommand(sender, args); break;
case EXPORT: exportCommand.onCommand(sender, args); break;
case IMPORT: importCommand.onCommand(sender, args); break;
}
}
return true;
}


@Nullable
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
List<String> tabComplete = new ArrayList<>();
if (args.length == 1) {
for (SubCommands subCommandEnum : SubCommands.values()) {
String subCommandStr = subCommandEnum.toString().toLowerCase();
if (subCommandStr.startsWith(args[0].toLowerCase())) {
tabComplete.add(subCommandStr);
}
}
}
else if (args.length > 1) {
SubCommands subCommand;
try {
subCommand = SubCommands.valueOf(args[0].toUpperCase());
switch (subCommand) {
case SELECT: tabComplete = heroSelectCommand.tabComplete(sender, args); break;
case RELOAD: tabComplete = reloadCommand.tabComplete(sender, args); break;
case REROLL: tabComplete = reroll.tabComplete(sender, args); break;
case EXPORT: tabComplete = exportCommand.tabComplete(sender, args); break;
case IMPORT: tabComplete = importCommand.tabComplete(sender, args); break;
}
} catch(IllegalArgumentException ignored) {}
}
return tabComplete;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,50 +9,46 @@
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;

import java.util.ArrayList;
import java.util.List;

public class HeroCMD implements CommandExecutor, TabExecutor {
public class HeroSelect implements SubCommand {

private final HeroHandler heroHandler;
private final ConfigHandler configHandler;

public HeroCMD(HeroHandler heroHandler, ConfigHandler configHandler) {
public HeroSelect(HeroHandler heroHandler, ConfigHandler configHandler) {
this.heroHandler = heroHandler;
this.configHandler = configHandler;
}

//args[0] is select, args[1] is the hero name, args[2] is the player being given the new hero
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
public void onCommand(CommandSender sender, String[] args) {
Audience audience = Superheroes2.getBukkitAudiences().sender(sender);
if (!sender.hasPermission("superheroes.hero")) {
audience.sendMessage(MineDown.parse(configHandler.getNoPermissionMessage(), "player", sender.getName()));
return true;
return;
}
if (args.length == 0) {
if (args.length <= 1) {
if (sender instanceof Player) {
Player player = (Player) sender;
Superhero superhero = heroHandler.getSuperhero(player);
audience.sendMessage(MineDown.parse(configHandler.getCurrentHeroMessage(), "player", player.getName(), "hero", superhero.getName()));
return true;
}
else {
return false;
}
return;
}
Superhero power = heroHandler.getSuperhero(args[0]);
Superhero power = heroHandler.getSuperhero(args[1]);
if (power == null) {
return false;
audience.sendMessage(MineDown.parse(configHandler.getInvalidHeroMessage(), "player", sender.getName(), "hero", args[1]));
return;
}
if (!sender.hasPermission("superheroes.hero." + power.getName().toLowerCase())) {
audience.sendMessage(MineDown.parse(configHandler.getNoPermissionMessage(), "player", sender.getName()));
return true;
return;
}
if (!sender.hasPermission("superheroes.hero.bypasscooldown") && sender instanceof Player) {
Player senderPlayer = (Player) sender;
Expand All @@ -64,22 +60,23 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
"currentcooldown", String.valueOf(Math.round(seconds)),
"cooldown", String.valueOf(configHandler.getHeroCommandCooldown()));
audience.sendMessage(message);
return true;
return;
}
}
Player player;
if (args.length >= 2 && sender.hasPermission("superheroes.hero.others")) {
player = Bukkit.getPlayer(args[1]);
if (args.length >= 3 && sender.hasPermission("superheroes.hero.others")) {
player = Bukkit.getPlayer(args[2]);
if (player == null) {
return false;
audience.sendMessage(MineDown.parse(configHandler.getInvalidPlayerMessage(), "player", sender.getName()));
return;
}
}
else {
if (sender instanceof Player) {
player = (Player) sender;
}
else {
return false;
return;
}
}
heroHandler.setHero(player, power);
Expand All @@ -88,16 +85,15 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
superheroPlayer.setHeroCommandTimestamp(System.currentTimeMillis());
heroHandler.saveSuperheroPlayer(superheroPlayer);
}
return true;
}

@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
public List<String> tabComplete(CommandSender sender, String[] args) {
List<String> heroesTabComplete = new ArrayList<>();
if (args.length == 1) {
String firstArg = args[0];
if (args.length == 2) {
String secondArg = args[1];
for (Superhero superhero : heroHandler.getNameToSuperhero().values()) {
if (superhero.getName().startsWith(firstArg) && sender.hasPermission("superheroes.hero." + superhero.getName().toLowerCase())) {
if (superhero.getName().startsWith(secondArg) && sender.hasPermission("superheroes.hero." + superhero.getName().toLowerCase())) {
heroesTabComplete.add(superhero.getName());
}
}
Expand Down
43 changes: 43 additions & 0 deletions src/main/java/me/xemor/superheroes2/commands/Import.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package me.xemor.superheroes2.commands;

import de.themoep.minedown.adventure.MineDown;
import me.xemor.superheroes2.Superheroes2;
import me.xemor.superheroes2.data.ConfigHandler;
import me.xemor.superheroes2.data.HeroHandler;
import net.kyori.adventure.audience.Audience;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;

import java.util.List;

public class Import implements SubCommand {

private final String importing = ChatColor.translateAlternateColorCodes('&', "&aImporting...");
private final String done = ChatColor.translateAlternateColorCodes('&', "&aDone!");
private HeroHandler heroHandler;
private ConfigHandler configHandler;

public Import(HeroHandler heroHandler, ConfigHandler configHandler) {
this.heroHandler = heroHandler;
this.configHandler = configHandler;
}

@Override
public void onCommand(CommandSender sender, String[] args) {
if (sender.hasPermission("superheroes.import")) {
sender.sendMessage(importing);
heroHandler.importFiles().thenAccept((ignored) -> Bukkit.getScheduler().runTask(heroHandler.getPlugin(), () -> configHandler.reloadConfig(heroHandler)));
sender.sendMessage(done);
}
else {
Audience audience = Superheroes2.getBukkitAudiences().sender(sender);
audience.sendMessage(MineDown.parse(configHandler.getNoPermissionMessage()));
}
}

@Override
public List<String> tabComplete(CommandSender sender, String[] args) {
return null;
}
}
15 changes: 9 additions & 6 deletions src/main/java/me/xemor/superheroes2/commands/Reload.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,25 @@
import me.xemor.superheroes2.data.ConfigHandler;
import me.xemor.superheroes2.data.HeroHandler;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

public class Reload implements CommandExecutor {
import java.util.List;

public class Reload implements SubCommand {

private final String noPermission = ChatColor.translateAlternateColorCodes('&', "&4You do not have permission to use this power!");
private final String reloading = ChatColor.translateAlternateColorCodes('&', "&aReloading...");
private final String done = ChatColor.translateAlternateColorCodes('&', "&aDone!");
private final HeroHandler heroHandler;
private final ConfigHandler configHandler;


public Reload(HeroHandler heroHandler, ConfigHandler configHandler) {
this.heroHandler = heroHandler;
this.configHandler = configHandler;
}

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
public void onCommand(CommandSender sender, String[] args) {
if (sender.hasPermission("superheroes.reload")) {
sender.sendMessage(reloading);
configHandler.reloadConfig(heroHandler);
Expand All @@ -31,6 +30,10 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
else {
sender.sendMessage(noPermission);
}
return true;
}

@Override
public List<String> tabComplete(CommandSender sender, String[] args) {
return null;
}
}
Loading

0 comments on commit 6dc74a5

Please sign in to comment.