Merge pull request 'Reimplement /stat and /top command' (#2) from develop into main
Reviewed-on: #2
This commit is contained in:
commit
634bf298b0
|
@ -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() {
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
Loading…
Reference in New Issue