feat: add basic player stats
This commit is contained in:
parent
72c6fa8d9c
commit
994fccf845
8 changed files with 176 additions and 2 deletions
4
.vscode/extensions.json
vendored
4
.vscode/extensions.json
vendored
|
@ -1,5 +1,9 @@
|
|||
{
|
||||
"recommendations": [
|
||||
"vscjava.vscode-java-pack",
|
||||
"streetsidesoftware.code-spell-checker",
|
||||
"streetsidesoftware.code-spell-checker-german",
|
||||
"petekinnecom.terminal-command-keys",
|
||||
"alexcvzz.vscode-sqlite",
|
||||
]
|
||||
}
|
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
|
@ -5,6 +5,8 @@
|
|||
"java.configuration.updateBuildConfiguration": "automatic",
|
||||
"cSpell.words": [
|
||||
"Aragur",
|
||||
"DRYOUT",
|
||||
"Elytra",
|
||||
"Gamemode",
|
||||
"Gamerules",
|
||||
"Gson",
|
||||
|
@ -14,6 +16,7 @@
|
|||
"koords",
|
||||
"mkdir",
|
||||
"npcs",
|
||||
"sqlite",
|
||||
"teamcolors",
|
||||
"testremove",
|
||||
"unban",
|
||||
|
|
|
@ -11,6 +11,7 @@ import org.bukkit.plugin.java.JavaPlugin;
|
|||
import de.cliffbreak.varo.commands.CoordsCommand;
|
||||
import de.cliffbreak.varo.commands.VaroCommand;
|
||||
import de.cliffbreak.varo.commands.VaroTabCompleter;
|
||||
import de.cliffbreak.varo.database.Database;
|
||||
import de.cliffbreak.varo.discord.DiscordBot;
|
||||
import de.cliffbreak.varo.listeners.BannedActionListener;
|
||||
import de.cliffbreak.varo.listeners.BannedItemListener;
|
||||
|
@ -40,6 +41,7 @@ public class Varo extends JavaPlugin {
|
|||
private TeamManager teamManager;
|
||||
private MessageUtils messageUtils;
|
||||
private DiscordBot discordBot;
|
||||
private Database database;
|
||||
|
||||
private boolean canCreatePortal = false;
|
||||
|
||||
|
@ -57,6 +59,7 @@ public class Varo extends JavaPlugin {
|
|||
this.varoUtils = new VaroUtils(this);
|
||||
this.teamManager = new TeamManager();
|
||||
this.messageUtils = new MessageUtils(this);
|
||||
this.database = new Database();
|
||||
|
||||
this.config.addDefault("Varo.Start", 1590427800000f);
|
||||
this.config.addDefault("Varo.Debug", false);
|
||||
|
@ -91,6 +94,7 @@ public class Varo extends JavaPlugin {
|
|||
public void onDisable() {
|
||||
this.getLogger().info("Stopping CliffbreakVaro!");
|
||||
this.playerCache.shutdown();
|
||||
this.database.shutdown();
|
||||
try {
|
||||
this.discordBot.shutdown();
|
||||
} catch (final NoClassDefFoundError err) {
|
||||
|
@ -144,4 +148,8 @@ public class Varo extends JavaPlugin {
|
|||
public DiscordBot getDiscordBot() {
|
||||
return this.discordBot;
|
||||
}
|
||||
|
||||
public Database getDatabase() {
|
||||
return this.database;
|
||||
}
|
||||
}
|
||||
|
|
59
varo/src/main/java/de/cliffbreak/varo/database/Database.java
Normal file
59
varo/src/main/java/de/cliffbreak/varo/database/Database.java
Normal file
|
@ -0,0 +1,59 @@
|
|||
package de.cliffbreak.varo.database;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
public class Database {
|
||||
|
||||
private Connection conn;
|
||||
|
||||
public Database() {
|
||||
try {
|
||||
this.conn = DriverManager.getConnection("jdbc:sqlite:plugins/CliffbreakVaro/players.db");
|
||||
this.init();
|
||||
} catch (final SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void init() throws SQLException {
|
||||
final Statement s = conn.createStatement();
|
||||
s.executeUpdate(
|
||||
"CREATE TABLE IF NOT EXISTS kills (`player` VARCHAR(32) NOT NULL, `victim` VARCHAR(32) NOT NULL);");
|
||||
s.close();
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
try {
|
||||
this.conn.close();
|
||||
} catch (final SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void addKill(final String uuid, final String victimUuid) {
|
||||
try {
|
||||
final Statement s = conn.createStatement();
|
||||
s.executeUpdate("INSERT INTO kills (`player`, `victim`) VALUES ('" + uuid + "', '" + victimUuid + "');");
|
||||
s.close();
|
||||
} catch (final SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public int getKills(final String uuid) {
|
||||
try {
|
||||
final Statement s = conn.createStatement();
|
||||
final ResultSet rs = s.executeQuery("SELECT COUNT(`victim`) FROM kills WHERE `player` ='" + uuid + "';");
|
||||
final int kills = rs.getInt("COUNT(`victim`)");
|
||||
s.close();
|
||||
return kills;
|
||||
} catch (final SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -41,5 +41,14 @@ public class MessageListener extends ListenerAdapter {
|
|||
null, null, null, null, new ArrayList<Field>(Arrays.asList()))).queue();
|
||||
break;
|
||||
}
|
||||
if (message.getContentRaw().startsWith("!stats")) {
|
||||
if (message.getMentionedMembers().size() != 1)
|
||||
return;
|
||||
|
||||
final String id = message.getMentionedMembers().get(0).getId();
|
||||
final String uuid = this.plugin.getTeamManager().getPlayerByDiscordId(id);
|
||||
final int kills = this.plugin.getDatabase().getKills(uuid);
|
||||
channel.sendMessage("Der Spieler <@!" + id + "> hat momentan " + kills + " Kills.").queue();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
package de.cliffbreak.varo.listeners;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
|
@ -24,8 +26,83 @@ public class PlayerDeathListener implements Listener {
|
|||
e.getEntity().kickPlayer("§4Du bist gestorben.\n \n§cDamit bist du aus §eVaro§c ausgeschieden.");
|
||||
}
|
||||
}.runTaskLater(this.plugin, 20);
|
||||
e.getEntity().setHealth(20d); // Reset health to prevent death dialog after rejoin (if unbanned)
|
||||
final EntityDamageEvent damageCause = e.getEntity().getLastDamageCause();
|
||||
final Player killer = e.getEntity().getKiller();
|
||||
if (killer != null) {
|
||||
System.out.println(killer.getName());
|
||||
this.plugin.getDatabase().addKill(killer.getUniqueId().toString().replace("-", ""),
|
||||
e.getEntity().getUniqueId().toString().replace("-", ""));
|
||||
} else {
|
||||
System.out.println("No killer");
|
||||
}
|
||||
System.out.println(damageCause.getCause());
|
||||
switch (damageCause.getCause()) {
|
||||
case BLOCK_EXPLOSION:
|
||||
// TNT
|
||||
if (killer == null) {
|
||||
e.setDeathMessage("Hier die Todesnachricht einfügen..");
|
||||
} else {
|
||||
e.setDeathMessage("Hier die Todesnachricht einfügen.. mit " + killer + ".");
|
||||
}
|
||||
break;
|
||||
case CONTACT:
|
||||
// Cactus
|
||||
break;
|
||||
case DROWNING:
|
||||
break;
|
||||
case ENTITY_EXPLOSION:
|
||||
// Creeper
|
||||
break;
|
||||
case ENTITY_ATTACK:
|
||||
case ENTITY_SWEEP_ATTACK:
|
||||
break;
|
||||
case FALL:
|
||||
break;
|
||||
case FALLING_BLOCK:
|
||||
break;
|
||||
case FIRE:
|
||||
case FIRE_TICK:
|
||||
break;
|
||||
case HOT_FLOOR:
|
||||
// Magma Block
|
||||
break;
|
||||
case LAVA:
|
||||
break;
|
||||
case LIGHTNING:
|
||||
break;
|
||||
case MAGIC:
|
||||
// Potion (should be impossible)
|
||||
break;
|
||||
case POISON:
|
||||
break;
|
||||
case PROJECTILE:
|
||||
break;
|
||||
case STARVATION:
|
||||
break;
|
||||
case SUFFOCATION:
|
||||
// Border damage or sand/gravel
|
||||
break;
|
||||
case THORNS:
|
||||
break;
|
||||
case VOID:
|
||||
break;
|
||||
case WITHER:
|
||||
break;
|
||||
case CRAMMING: // Very rare so handle as default death
|
||||
case CUSTOM: // No custom damage provider so impossible
|
||||
case DRAGON_BREATH: // End is disabled so impossible
|
||||
case DRYOUT: // No fish so impossible
|
||||
case FLY_INTO_WALL: // No Elytra so impossible
|
||||
case MELTING: // No snowman so impossible
|
||||
case SUICIDE: // No access to /kill command
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Reset health to prevent death dialog after rejoin (if unbanned)
|
||||
e.getEntity().setHealth(20d);
|
||||
e.getEntity().setGameMode(GameMode.SPECTATOR);
|
||||
|
||||
this.plugin.getBanUtils().addBan(e.getEntity().getUniqueId());
|
||||
this.plugin.getDiscordBot().broadcastMessage("Der Spieler <@!"
|
||||
+ this.plugin.getTeamManager().getDiscordIdByPlayer(e.getEntity()) + "> ist gestorben.");
|
||||
|
|
|
@ -117,6 +117,20 @@ public class TeamManager {
|
|||
return "";
|
||||
}
|
||||
|
||||
public String getPlayerByDiscordId(final String id) {
|
||||
final JSONArray jsonTeams = config.getArray("teams");
|
||||
for (final Object jsonRawTeam : jsonTeams) {
|
||||
final JSONObject jsonTeam = (JSONObject) jsonRawTeam;
|
||||
for (final Object rawPlayer : ((JSONArray) jsonTeam.get("players"))) {
|
||||
final JSONObject jsonPlayer = (JSONObject) rawPlayer;
|
||||
if (jsonPlayer.get("discord").equals(id)) {
|
||||
return jsonPlayer.get("uuid").toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public void setAFK(final String player) {
|
||||
final Team oldTeam = getTeamByPlayer(player);
|
||||
for (final Team team : this.teams) {
|
||||
|
|
|
@ -53,7 +53,7 @@ public class VaroUtils {
|
|||
|
||||
// DEBUG specific Settings
|
||||
if (this.plugin.getConfig().getBoolean("Varo.Debug")) {
|
||||
world.setDifficulty(Difficulty.PEACEFUL);
|
||||
// world.setDifficulty(Difficulty.PEACEFUL);
|
||||
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
|
||||
world.setGameRule(GameRule.DO_WEATHER_CYCLE, false);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue