Reimplement /stat and /top command

This commit is contained in:
Brayd 2023-01-27 02:11:20 +01:00
parent e87cfef49a
commit 6b99b4fa65
Signed by: brayd
GPG Key ID: C2B176B9DEB8BA48
4 changed files with 220 additions and 2 deletions

View File

@ -1,5 +1,7 @@
package net.canreal.canrealsystem;
import net.canreal.canrealsystem.commands.StatCommand;
import net.canreal.canrealsystem.commands.TopCommand;
import net.canreal.canrealsystem.events.CommandPreprocessEvent;
import net.canreal.canrealsystem.events.PlayerKillEvent;
import net.canreal.canrealsystem.systemhandlers.ConfigHandler;
@ -47,8 +49,8 @@ public final class Canrealsystem extends JavaPlugin {
private void registerCommands() {
// this.getCommand("plugins").setExecutor(new PluginCommand());
// this.getCommand("stats").setExecutor(new StatsCommand());
// this.getCommand("top").setExecutor(new TopCommand());
this.getCommand("stat").setExecutor(new StatCommand());
this.getCommand("top").setExecutor(new TopCommand());
}
private void registerEvents() {

View File

@ -0,0 +1,116 @@
package net.canreal.canrealsystem.commands;
import net.canreal.canrealsystem.Canrealsystem;
import net.canreal.canrealsystem.systemhandlers.ConfigHandler;
import net.canreal.canrealsystem.systemhandlers.MySQLHandler;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import static org.bukkit.Bukkit.getServer;
public class StatCommand implements CommandExecutor {
private static MySQLHandler mysqlHandler;
private static ConfigHandler configHandler;
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
mysqlHandler = new MySQLHandler(JavaPlugin.getPlugin(Canrealsystem.class));
configHandler = new ConfigHandler(JavaPlugin.getPlugin(Canrealsystem.class));
if (sender instanceof Player) {
if (args.length == 0) {
Player p = (Player) sender;
try {
if (isPlayerInDatabase(p)) {
try {
int kills = getKills(p);
int deaths = getDeaths(p);
float kd = (float) kills / (float) deaths;
String kdString = String.format("%.2f", kd);
p.sendMessage("§6Deine Statistiken:");
p.sendMessage("§6Kills: §e" + kills);
p.sendMessage("§6Tode: §e" + deaths);
p.sendMessage("§6K/D: §e" + kdString);
} catch (SQLException e) {
e.printStackTrace();
}
} else {
p.sendMessage("§cDu hast noch keine Statistiken.");
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (args.length == 1) {
// Get player from args
Player target = getServer().getPlayer(args[0]);
Player p = (Player) sender;
if (target != null) {
try {
if (isPlayerInDatabase(target)) {
try {
int kills = getKills(target);
int deaths = getDeaths(target);
float kd = (float) kills / (float) deaths;
String kdString = String.format("%.2f", kd);
p.sendMessage("§6Statistiken von " + target.getName() + ":");
p.sendMessage("§6Kills: §e" + kills);
p.sendMessage("§6Tode: §e" + deaths);
p.sendMessage("§6K/D: §e" + kdString);
} catch (SQLException e) {
e.printStackTrace();
}
} else {
p.sendMessage("§cDer Spieler hat noch keine Statistiken.");
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
} else {
p.sendMessage("§cDer Spieler ist nicht online.");
}
}
if (args.length > 1) {
sender.sendMessage("§cBitte benutze /stat [Spieler]");
}
}
return true;
}
private boolean isPlayerInDatabase(Player p) throws SQLException {
configHandler = new ConfigHandler(JavaPlugin.getPlugin(Canrealsystem.class));
// Get database table name from config
String tableName = configHandler.getString("database.mysql.tableNamePVPKills");
return mysqlHandler.getConnection().prepareStatement("SELECT * FROM " + tableName + " WHERE player_uuid = '" + p.getUniqueId() + "'").executeQuery().next();
}
private int getKills(Player p) throws SQLException {
configHandler = new ConfigHandler(JavaPlugin.getPlugin(Canrealsystem.class));
// Get database table name from config
String tableName = configHandler.getString("database.mysql.tableNamePVPKills");
PreparedStatement ps = mysqlHandler.getConnection().prepareStatement("SELECT kill_count FROM " + tableName + " WHERE player_uuid = '" + p.getUniqueId() + "'");
ResultSet rs = ps.executeQuery();
rs.next();
return rs.getInt("kill_count");
}
private int getDeaths(Player p) throws SQLException {
configHandler = new ConfigHandler(JavaPlugin.getPlugin(Canrealsystem.class));
// Get database table name from config
String tableName = configHandler.getString("database.mysql.tableNamePVPKills");
PreparedStatement ps = mysqlHandler.getConnection().prepareStatement("SELECT killed_count FROM " + tableName + " WHERE player_uuid = '" + p.getUniqueId() + "'");
ResultSet rs = ps.executeQuery();
rs.next();
return rs.getInt("killed_count");
}
}

View File

@ -0,0 +1,87 @@
package net.canreal.canrealsystem.commands;
import net.canreal.canrealsystem.Canrealsystem;
import net.canreal.canrealsystem.systemhandlers.ConfigHandler;
import net.canreal.canrealsystem.systemhandlers.MySQLHandler;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TopCommand implements CommandExecutor {
private static MySQLHandler mysqlHandler;
private static ConfigHandler configHandler;
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
mysqlHandler = new MySQLHandler(JavaPlugin.getPlugin(Canrealsystem.class));
configHandler = new ConfigHandler(JavaPlugin.getPlugin(Canrealsystem.class));
if (!(sender instanceof Player)) {
sender.sendMessage("§cDieser Befehl kann nur ingame verwendet werden.");
return true;
}
if (args.length == 0) {
sender.sendMessage("§cBitte gib an, nach welcher Statistik du sortieren möchtest. (/top <kills/deaths>");
}
if (args.length == 1) {
if (args[0].equalsIgnoreCase("kills")) {
sender.sendMessage("§6Top 10 Kills:");
getTopKills((Player) sender);
}
if (args[0].equalsIgnoreCase("deaths")) {
sender.sendMessage("§6Top 10 Tode:");
getTopDeaths((Player) sender);
}
}
return true;
}
// Function to get top 10 players with most kills from database and send them to player
public void getTopKills(Player p) {
mysqlHandler = new MySQLHandler(JavaPlugin.getPlugin(Canrealsystem.class));
configHandler = new ConfigHandler(JavaPlugin.getPlugin(Canrealsystem.class));
String tableName = configHandler.getString("database.mysql.tableNamePVPKills");
String query = "SELECT * FROM " + tableName + " ORDER BY kill_count DESC LIMIT 10";
try {
PreparedStatement preparedStatement = mysqlHandler.getConnection().prepareStatement(query);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
String playerName = resultSet.getString("player_name");
int kills = resultSet.getInt("kill_count");
p.sendMessage("§6" + playerName + ": §e" + kills);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
// Function to get top 10 players with most deaths from database and send them to player
public void getTopDeaths(Player p) {
mysqlHandler = new MySQLHandler(JavaPlugin.getPlugin(Canrealsystem.class));
configHandler = new ConfigHandler(JavaPlugin.getPlugin(Canrealsystem.class));
String tableName = configHandler.getString("database.mysql.tableNamePVPKills");
String query = "SELECT * FROM " + tableName + " ORDER BY killed_count DESC LIMIT 10";
try {
PreparedStatement preparedStatement = mysqlHandler.getConnection().prepareStatement(query);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
String playerName = resultSet.getString("player_name");
int deaths = resultSet.getInt("killed_count");
p.sendMessage("§6" + playerName + ": §e" + deaths);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

View File

@ -5,3 +5,16 @@ api-version: 1.19
authors: [ brayd ]
description: Das Basisplugin von Canreal
website: https://canreal.net
commands:
stat:
description: Zeigt dir die Statistiken eines Spielers an
usage: /stat
permission: canrealsystem.stat
permission-message: Du hast keine Berechtigung, um diesen Befehl zu benutzen!
aliases: [stats]
top:
description: Zeigt dir die Top 10 Spieler an
usage: /top <kills|deaths>
permission: canrealsystem.top
permission-message: Du hast keine Berechtigung, um diesen Befehl zu benutzen!
aliases: [top10]