Added /kp stats <username> for offline players

This commit is contained in:
cervinakuy committed 2021-04-18 17:12:17 -07:00
1 parent 188642f1a1
commit 8cbb0f500b
9 files changed
+86 -97

No files matched your search

@@ -5,7 +5,6 @@ import com.planetgallium.kitpvp.Game;
import com.planetgallium.kitpvp.api.Kit;
import com.planetgallium.kitpvp.game.Arena;
import com.planetgallium.kitpvp.util.*;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location;
@@ -14,9 +13,7 @@ import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.potion.Potion;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionType;
import org.bukkit.scheduler.BukkitRunnable;
import java.io.File;
@@ -185,23 +182,18 @@ public class MainCommand implements CommandExecutor {
} else if (args[0].equalsIgnoreCase("stats") && hasPermission(sender, "kp.command.stats.other")) {
// TODO: now with database you can get anyone's stats regardless if online. implement
String targetName = args[1];
Player target = Toolkit.getPlayerCaseInsensitive(targetName);
String targetUUID = plugin.getDatabase().usernameToUUID("stats", targetName);
if (target != null) {
for (String line : messages.getStringList("Messages.Stats.Message")) {
sender.sendMessage(addPlaceholdersIfPossible(target, Toolkit.translate(line)));
}
// kp setkills cervinakuy 10
// kp setdeaths cervinakuy 89
// kp setexperience cervinakuy 10
// kp setlevel cervinakuy 10
if (targetUUID != null) {
sendStatsMessage(sender, targetName, targetUUID);
} else {
sender.sendMessage(messages.getString("Messages.Error.Offline"));
}
}
@@ -242,11 +234,7 @@ public class MainCommand implements CommandExecutor {
if (args[0].equalsIgnoreCase("stats") && hasPermission(sender, "kp.command.stats")) {
for (String line : messages.getStringList("Messages.Stats.Message")) {
p.sendMessage(addPlaceholdersIfPossible(p, Toolkit.translate(line)));
}
sendStatsMessage(p, p.getName(), p.getUniqueId().toString());
} else if (args[0].equalsIgnoreCase("menu") && hasPermission(sender, "kp.command.menu")) {
@@ -473,20 +461,12 @@ public class MainCommand implements CommandExecutor {
}
private String addPlaceholdersIfPossible(Player p, String text) {
private void sendStatsMessage(CommandSender receiver, String username, String targetUUID) {
if (plugin.hasPlaceholderAPI()) {
text = PlaceholderAPI.setPlaceholders(p, text);
for (String line : messages.getStringList("Messages.Stats.Message")) {
receiver.sendMessage(arena.replacePlaceholderIfPresent(line, username, targetUUID));
}
text = text.replace("%player%", p.getName())
.replace("%kills%", String.valueOf(arena.getStats().getKills(p.getUniqueId())))
.replace("%deaths%", String.valueOf(arena.getStats().getDeaths(p.getUniqueId())))
.replace("%level%", String.valueOf(arena.getLevels().getLevel(p.getUniqueId())))
.replace("%experience%", String.valueOf(arena.getLevels().getExperience(p.getUniqueId())));
return text;
}
}
@@ -197,30 +197,30 @@ public class Arena {
text = PlaceholderAPI.setPlaceholders(p, text);
}
return replacePlaceholderIfPresent(text, p);
return replacePlaceholderIfPresent(text, p.getName(), p.getUniqueId().toString());
}
public String replacePlaceholderIfPresent(String s, Player p) {
public String replacePlaceholderIfPresent(String s, String username, String uuid) {
// The reason I'm doing all these if statements rather than a more concise code solution is to reduce
// the amount of data that is unnecessarily fetched (ex by using .replace) to improve performance
// no longer constantly fetching stats from database for EACH line of scoreboard on update and player join
if (s.contains("%streak%")) {
s = s.replace("%streak%", String.valueOf(getKillStreaks().getStreak(p.getName())));
s = s.replace("%streak%", String.valueOf(getKillStreaks().getStreak(username)));
}
if (s.contains("%player%")) {
s = s.replace("%player%", p.getName());
s = s.replace("%player%", username);
}
if (s.contains("%xp%")) {
s = s.replace("%xp%", String.valueOf(getLevels().getExperience(p.getUniqueId())));
s = s.replace("%xp%", String.valueOf(getLevels().getExperience(uuid)));
}
if (s.contains("%level%")) {
s = s.replace("%level%", String.valueOf(levels.getLevel(p.getUniqueId())));
s = s.replace("%level%", String.valueOf(levels.getLevel(uuid)));
}
if (s.contains("%max_xp%")) {
@@ -232,20 +232,20 @@ public class Arena {
}
if (s.contains("%kd%")) {
s = s.replace("%kd%", String.valueOf(getStats().getKDRatio(p.getUniqueId())));
s = s.replace("%kd%", String.valueOf(getStats().getKDRatio(uuid)));
}
if (s.contains("%kills%")) {
s = s.replace("%kills%", String.valueOf(getStats().getKills(p.getUniqueId())));
s = s.replace("%kills%", String.valueOf(getStats().getKills(uuid.toString())));
}
if (s.contains("%deaths%")) {
s = s.replace("%deaths%", String.valueOf(getStats().getDeaths(p.getUniqueId())));
s = s.replace("%deaths%", String.valueOf(getStats().getDeaths(uuid)));
}
if (s.contains("%kit%")) {
if (getKits().getKitOfPlayer(p.getName()) != null) {
s = s.replace("%kit%", getKits().getKitOfPlayer(p.getName()).getName());
if (getKits().getKitOfPlayer(username) != null) {
s = s.replace("%kit%", getKits().getKitOfPlayer(username).getName());
} else {
s = s.replace("%kit%", "None");
}
@@ -137,6 +137,22 @@ public class Infobase {
}
public String usernameToUUID(String tableName, String username) {
Table table = getTableByName(tableName);
if (table == null) return null;
Column usernameColumn = new Column("username", DataType.STRING);
usernameColumn.setValue(username);
List<List<Column>> results = table.search(usernameColumn);
if (results.size() > 0 && results.get(0).size() > 0) {
return (String) table.search(usernameColumn).get(0).get(0).getValue();
}
return null;
}
public void cleanupUnusedKitCooldownTables() {
for (Table table : database.getTables()) {
@@ -195,7 +195,7 @@ public class Kits {
}
if (!(Toolkit.getPermissionAmount(p, "kp.levelbypass.", 0) >= kit.getLevel() ||
arena.getLevels().getLevel(p.getUniqueId()) >= kit.getLevel())) {
arena.getLevels().getLevel(p.getUniqueId().toString()) >= kit.getLevel())) {
p.sendMessage(messages.getString("Messages.Other.Needed").replace("%level%", String.valueOf(kit.getLevel())));
return;
}
@@ -1,7 +1,6 @@
package com.planetgallium.kitpvp.game;
import java.util.List;
import java.util.UUID;
import com.cryptomorin.xseries.XSound;
import com.planetgallium.kitpvp.util.Resource;
@@ -14,9 +13,9 @@ import com.planetgallium.kitpvp.util.Toolkit;
public class Levels {
private Arena arena;
private Resources resources;
private Resource levels;
private final Arena arena;
private final Resources resources;
private final Resource levels;
public Levels(Arena arena, Resources resources) {
this.arena = arena;
@@ -28,12 +27,12 @@ public class Levels {
if (levels.getBoolean("Levels.Levels.Enabled")) {
arena.getStats().addExperience(p.getUniqueId(), experience);
arena.getStats().addExperience(p.getUniqueId().toString(), experience);
if (arena.getLevels().getExperience(p.getUniqueId()) >= levels.getInt("Levels.Options.Experience-To-Level-Up")) {
if (arena.getLevels().getExperience(p.getUniqueId().toString()) >= levels.getInt("Levels.Options.Experience-To-Level-Up")) {
arena.getLevels().levelUp(p);
Bukkit.getPluginManager().callEvent(new PlayerLevelUpEvent(p, getLevel(p.getUniqueId())));
Bukkit.getPluginManager().callEvent(new PlayerLevelUpEvent(p, getLevel(p.getUniqueId().toString())));
}
@@ -45,7 +44,7 @@ public class Levels {
if (levels.getBoolean("Levels.Levels.Enabled")) {
arena.getStats().removeExperience(p.getUniqueId(), experience);
arena.getStats().removeExperience(p.getUniqueId().toString(), experience);
}
@@ -53,12 +52,12 @@ public class Levels {
public void levelUp(Player p) {
if (arena.getStats().getLevel(p.getUniqueId()) != levels.getInt("Levels.Options.Maximum-Level")) {
if (arena.getStats().getLevel(p.getUniqueId().toString()) != levels.getInt("Levels.Options.Maximum-Level")) {
arena.getStats().setLevel(p.getUniqueId(), arena.getLevels().getLevel(p.getUniqueId()) + 1);
arena.getStats().setExperience(p.getUniqueId(), 0);
arena.getStats().setLevel(p.getUniqueId().toString(), arena.getLevels().getLevel(p.getUniqueId().toString()) + 1);
arena.getStats().setExperience(p.getUniqueId().toString(), 0);
String newLevel = String.valueOf(getLevel(p.getUniqueId()));
String newLevel = String.valueOf(getLevel(p.getUniqueId().toString()));
List<String> levelUpCommands = levels.getStringList("Levels.Commands-On-Level-Up");
Toolkit.runCommands(p, levelUpCommands, "%level%", newLevel);
@@ -73,22 +72,18 @@ public class Levels {
} else {
arena.getStats().setExperience(p.getUniqueId(), 0);
arena.getStats().setExperience(p.getUniqueId().toString(), 0);
}
}
public int getLevel(UUID uuid) {
public int getLevel(String uuid) {
return arena.getStats().getLevel(uuid);
}
public int getExperience(UUID uuid) {
public int getExperience(String uuid) {
return arena.getStats().getExperience(uuid);
}
}
@@ -5,8 +5,6 @@ import com.planetgallium.kitpvp.util.Toolkit;
import com.zp4rker.localdb.DataType;
import org.bukkit.entity.Player;
import java.util.UUID;
public class Stats {
private final Infobase database;
@@ -16,16 +14,16 @@ public class Stats {
}
public void createPlayer(Player p) {
if (!isPlayerRegistered(p.getUniqueId())) {
if (!isPlayerRegistered(p.getUniqueId().toString())) {
database.createPlayerStats(p);
}
}
public boolean isPlayerRegistered(UUID uuid) {
return database.databaseTableContainsUUID("stats", uuid.toString());
public boolean isPlayerRegistered(String uuid) {
return database.databaseTableContainsUUID("stats", uuid);
}
public double getKDRatio(UUID uuid) {
public double getKDRatio(String uuid) {
if (getDeaths(uuid) != 0) {
double divided = (double) getKills(uuid) / getDeaths(uuid);
return Toolkit.round(divided, 2);
@@ -33,19 +31,19 @@ public class Stats {
return 0.00;
}
public void addKills(UUID uuid, int amount) {
public void addKills(String uuid, int amount) {
setKills(uuid, getKills(uuid) + amount);
}
public void addDeaths(UUID uuid, int amount) {
public void addDeaths(String uuid, int amount) {
setDeaths(uuid, getDeaths(uuid) + amount);
}
public void addExperience(UUID uuid, int amount) {
public void addExperience(String uuid, int amount) {
setExperience(uuid, getExperience(uuid) + amount);
}
public void removeExperience(UUID uuid, int amount) {
public void removeExperience(String uuid, int amount) {
if (isPlayerRegistered(uuid)) {
if (getExperience(uuid) > amount) {
setExperience(uuid, getExperience(uuid) - amount);
@@ -53,40 +51,40 @@ public class Stats {
}
}
public void setKills(UUID uuid, int kills) {
if (!database.databaseTableContainsUUID("stats", uuid.toString())) return;
database.setData("stats", "kills", kills, DataType.INTEGER, uuid.toString());
public void setKills(String uuid, int kills) {
if (!database.databaseTableContainsUUID("stats", uuid)) return;
database.setData("stats", "kills", kills, DataType.INTEGER, uuid);
}
public void setDeaths(UUID uuid, int deaths) {
if (!database.databaseTableContainsUUID("stats", uuid.toString())) return;
database.setData("stats", "deaths", deaths, DataType.INTEGER, uuid.toString());
public void setDeaths(String uuid, int deaths) {
if (!database.databaseTableContainsUUID("stats", uuid)) return;
database.setData("stats", "deaths", deaths, DataType.INTEGER, uuid);
}
public void setExperience(UUID uuid, int experience) {
if (!database.databaseTableContainsUUID("stats", uuid.toString())) return;
database.setData("stats", "experience", experience, DataType.INTEGER, uuid.toString());
public void setExperience(String uuid, int experience) {
if (!database.databaseTableContainsUUID("stats", uuid)) return;
database.setData("stats", "experience", experience, DataType.INTEGER, uuid);
}
public void setLevel(UUID uuid, int level) {
if (!database.databaseTableContainsUUID("stats", uuid.toString())) return;
database.setData("stats", "level", level, DataType.INTEGER, uuid.toString());
public void setLevel(String uuid, int level) {
if (!database.databaseTableContainsUUID("stats", uuid)) return;
database.setData("stats", "level", level, DataType.INTEGER, uuid);
}
public int getKills(UUID uuid) {
return (int) database.getData("stats", "kills", uuid.toString());
public int getKills(String uuid) {
return (int) database.getData("stats", "kills", uuid);
}
public int getDeaths(UUID uuid) {
return (int) database.getData("stats", "deaths", uuid.toString());
public int getDeaths(String uuid) {
return (int) database.getData("stats", "deaths", uuid);
}
public int getExperience(UUID uuid) {
return (int) database.getData("stats", "experience", uuid.toString());
public int getExperience(String uuid) {
return (int) database.getData("stats", "experience", uuid);
}
public int getLevel(UUID uuid) {
return (int) database.getData("stats", "level", uuid.toString());
public int getLevel(String uuid) {
return (int) database.getData("stats", "level", uuid);
}
}
@@ -27,7 +27,7 @@ public class ChatListener implements Listener {
Player p = e.getPlayer();
String playerLevel = String.valueOf(arena.getLevels().getLevel(p.getUniqueId()));
String playerLevel = String.valueOf(arena.getLevels().getLevel(p.getUniqueId().toString()));
String levelPrefix = resources.getLevels().getString("Levels.Levels." + playerLevel + ".Prefix")
.replace("%level%", playerLevel);
@@ -54,7 +54,7 @@ public class DeathListener implements Listener {
setDeathMessage(victim);
respawnPlayer(victim);
arena.getStats().addDeaths(victim.getUniqueId(), 1);
arena.getStats().addDeaths(victim.getUniqueId().toString(), 1);
arena.getLevels().removeExperience(victim, resources.getLevels().getInt("Levels.Options.Experience-Taken-On-Death"));
if (config.getBoolean("Arena.DeathParticle")) {
@@ -267,7 +267,7 @@ public class DeathListener implements Listener {
if (!victim.getName().equals(killer.getName())) {
arena.getStats().addKills(killer.getUniqueId(), 1);
arena.getStats().addKills(killer.getUniqueId().toString(), 1);
arena.getLevels().addExperience(killer, resources.getLevels().getInt("Levels.Options.Experience-Given-On-Kill"));
List<String> killCommands = config.getStringList("Kill.Commands");
+2 -2
View File
@@ -39,7 +39,7 @@ Messages:
KitInvalid: '%prefix% &cYou cannot perform this action because you have a kit selected.'
CooldownKit: '%prefix% &cYou cannot select this kit for another %cooldown%.'
CooldownAbility: '%prefix% &cYou cannot use this ability for another %cooldown%.'
Offline: '%prefix% &cThe specified player is not online or not in an arena.'
Offline: '%prefix% &cThe specified player could not be found.'
Menu: '%prefix% &cFailed to automatically add to the menu, the menu may be full.'
PVP: '%prefix% &cPVP is not permitted in this region.'
Stats:
@@ -48,7 +48,7 @@ Messages:
- ' '
- ' &b&lStats for %player%'
- ' &aLevel: &7%level%/100'
- ' &aExperience: &7%experience%/100'
- ' &aExperience: &7%xp%/100'
- ' &aKills: &7%kills%'
- ' &aDeaths: &7%deaths%'
- ' '