wasteland/src/main/java/me/jamestmartin/wasteland/commands/CommandRank.java

96 lines
3.2 KiB
Java

package me.jamestmartin.wasteland.commands;
import java.sql.SQLException;
import java.util.Optional;
import java.util.logging.Level;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import me.jamestmartin.wasteland.Wasteland;
import me.jamestmartin.wasteland.ranks.EnlistedRank;
public class CommandRank implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length > 1) {
sender.sendMessage("Too many arguments!");
sender.sendMessage(command.getUsage());
return false;
}
String playerName;
String has;
String is;
String need;
String playerNameS;
Player subject;
boolean seeKills;
if (args.length == 1) {
subject = sender.getServer().getPlayer(args[0]);
if (!sender.equals(subject) && !sender.hasPermission("wasteland.view-rank.other")) {
sender.sendMessage("You do not have permission to view another player's rank.");
return false;
}
if (subject == null) {
sender.sendMessage("Unknown player: " + args[0]);
return false;
}
seeKills = !sender.equals(subject) && sender.hasPermission("wasteland.view-rank.other.kills");
playerName = subject.getDisplayName();
has = " has ";
is = " is ";
need = " needs ";
playerNameS = playerName + "'s";
} else if (sender instanceof Player) {
if (!sender.hasPermission("wasteland.view-rank")) {
sender.sendMessage("You do not have permission to view your own rank.");
}
seeKills = sender.hasPermission("wasteland.view-rank.kills");
subject = (Player) sender;
playerName = "You";
has = " have ";
is = " are ";
need = " need ";
playerNameS = "Your";
} else {
sender.sendMessage("You are not a player! Please specify a player whose rank you want to view.");
sender.sendMessage(command.getUsage());
return false;
}
try {
int kills = Wasteland.getInstance().getDatabase().getPlayerKills(subject);
Optional<EnlistedRank> rank = EnlistedRank.getRankFromKills(kills);
Optional<EnlistedRank> nextRank = EnlistedRank.getNextRank(subject);
if (rank.isPresent()) {
sender.sendMessage(playerName + is + "rank " + rank.get().formatFull() + ".");
}
if (seeKills) {
String hasKilled = playerName + has + "killed " + kills + " zombies";
String andHasToGo;
if (nextRank.isPresent()) {
int moreZombies = nextRank.get().getKills().get() - kills;
andHasToGo = " and" + need + "to kill " + moreZombies
+ " more to reach " + nextRank.get().formatFull() + ".";
} else {
andHasToGo = " and" + has + "reached maximum rank.";
}
sender.sendMessage(hasKilled + andHasToGo);
} else if (nextRank.isPresent()) {
sender.sendMessage(playerNameS + " next rank will be " + nextRank.get().formatExtended() + ".");
} else {
sender.sendMessage(playerName + has + "reached maximum rank.");
}
} catch (SQLException e) {
sender.sendMessage("Command failed due to database exception. Contact the server administrator.");
Wasteland.getInstance().getLogger().log(Level.SEVERE, "Failed to get player kills.", e);
}
return true;
}
}