Added /kp stats <username> for offline players
This commit is contained in:
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");
|
||||
|
||||
@@ -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%'
|
||||
- ' '
|
||||
|
||||
Reference in new issue
Block a user