1.1-pre1
This commit is contained in:
@@ -1,2 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//src/dev/heliosares/auxprotect/bungee/Results.java=UTF-8
|
||||
@@ -1,4 +1,4 @@
|
||||
name: AuxProtectBungee
|
||||
main: dev.heliosares.auxprotect.bungee.AuxProtectBungee
|
||||
version: 1.0.10.2
|
||||
version: 1.1-pre1
|
||||
author: Heliosares
|
||||
@@ -17,10 +17,11 @@ lookup-incompatible-tables: '&cThose actions are incompatible.'
|
||||
lookup-action-negate: '&cYou cannot negate actions.'
|
||||
lookup-action-perm: '&cYou do not have permission to lookup that action.'
|
||||
command-help-1: '&cYou don''t have a lookup to page through.'
|
||||
purge-purging: '&9Purge in progress..'
|
||||
purge-purging: '&9Purging ''%s''...'
|
||||
purge-complete: '&9Purge complete.'
|
||||
purge-error: '&cAn error occured while purging.'
|
||||
purge-time: '&cThat purge is too short. Try a longer amount of time.'
|
||||
purge-table: '&cThat table is invalid or does not exist.'
|
||||
unknown-subcommand: 'Unknown subcommand. Do ''/ap help'' for more info.'
|
||||
command-help-unknown-subcommand: '&cUnknown subcommand.'
|
||||
command-help-header: '&f----- &9AuxProtect Help &f-----'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: AuxProtect
|
||||
version: 1.0.11
|
||||
version: 1.1-pre1
|
||||
main: dev.heliosares.auxprotect.AuxProtect
|
||||
description: A plugin designed to supplement CoreProtect in a few ways.
|
||||
api-version: 1.13
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -2,7 +2,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>AuxProtect</groupId>
|
||||
<artifactId>AuxProtect</artifactId>
|
||||
<version>1.0.11</version>
|
||||
<version>1.1-pre1</version>
|
||||
<name>AuxProtect</name>
|
||||
<build>
|
||||
<directory>${testserver}/plugins</directory>
|
||||
|
||||
@@ -2,7 +2,9 @@ package dev.heliosares.auxprotect;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.HashMap;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.Container;
|
||||
@@ -29,6 +31,7 @@ import dev.heliosares.auxprotect.listeners.*;
|
||||
import dev.heliosares.auxprotect.utils.InvSerialization;
|
||||
import dev.heliosares.auxprotect.utils.Language;
|
||||
import dev.heliosares.auxprotect.utils.MyPermission;
|
||||
import dev.heliosares.auxprotect.utils.MySender;
|
||||
import dev.heliosares.auxprotect.utils.Telemetry;
|
||||
import dev.heliosares.auxprotect.utils.UpdateChecker;
|
||||
import dev.heliosares.auxprotect.utils.YMLManager;
|
||||
@@ -60,7 +63,7 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect {
|
||||
private Economy econ;
|
||||
private static AuxProtect instance;
|
||||
|
||||
SQLManager sqlManager;
|
||||
private static SQLManager sqlManager;
|
||||
|
||||
public String update;
|
||||
long lastCheckedForUpdate;
|
||||
@@ -101,7 +104,7 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect {
|
||||
} catch (Exception e) {
|
||||
warning("Failed to parse version string: \"" + Bukkit.getBukkitVersion() + "\". Defaulting to 1.16");
|
||||
SERVER_VERSION = 16;
|
||||
e.printStackTrace();
|
||||
print(e);
|
||||
}
|
||||
debug("Compatability version: " + SERVER_VERSION, 1);
|
||||
|
||||
@@ -143,13 +146,15 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
boolean success = false;
|
||||
if (mysql) {
|
||||
success = sqlManager.connect(user, pass);
|
||||
} else {
|
||||
success = sqlManager.connect();
|
||||
}
|
||||
if (!success) {
|
||||
try {
|
||||
if (mysql) {
|
||||
sqlManager.connect(user, pass);
|
||||
} else {
|
||||
sqlManager.connect();
|
||||
}
|
||||
sqlManager.count();
|
||||
} catch (SQLException e) {
|
||||
print(e);
|
||||
getLogger().severe("Failed to connect to SQL database. Disabling.");
|
||||
setEnabled(false);
|
||||
return;
|
||||
@@ -157,16 +162,22 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect {
|
||||
|
||||
for (Object command : getConfig().getList("purge-cmds")) {
|
||||
String cmd = (String) command;
|
||||
PurgeCommand purge = new PurgeCommand(AuxProtect.this);
|
||||
String[] argsOld = cmd.split(" ");
|
||||
String[] args = new String[argsOld.length + 1];
|
||||
args[0] = "purge";
|
||||
for (int i = 0; i < argsOld.length; i++) {
|
||||
args[i + 1] = argsOld[i];
|
||||
}
|
||||
purge.purge(Bukkit.getConsoleSender(), args);
|
||||
PurgeCommand.purge(AuxProtect.this, new MySender(Bukkit.getConsoleSender()), args);
|
||||
}
|
||||
|
||||
sqlManager.purgeUIDs();
|
||||
|
||||
try {
|
||||
sqlManager.vacuum();
|
||||
} catch (SQLException e) {
|
||||
print(e);
|
||||
}
|
||||
sqlManager.count();
|
||||
}
|
||||
}.runTaskAsynchronously(this);
|
||||
|
||||
@@ -239,7 +250,7 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect {
|
||||
}
|
||||
}
|
||||
}
|
||||
}.runTaskTimerAsynchronously(this, 10 * 20, 10 * 20);
|
||||
}.runTaskTimerAsynchronously(this, 1 * 20, 10 * 20);
|
||||
|
||||
getServer().getPluginManager().registerEvents(new ProjectileListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new EntityListener(this), this);
|
||||
@@ -288,7 +299,7 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect {
|
||||
}
|
||||
} catch (Exception e) {
|
||||
warning("Exception while hooking other plugins");
|
||||
e.printStackTrace();
|
||||
print(e);
|
||||
}
|
||||
|
||||
this.getCommand("claiminv").setExecutor(new ClaimInvCommand(this));
|
||||
@@ -325,9 +336,12 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect {
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
dbRunnable.run();
|
||||
if (sqlManager != null)
|
||||
if (dbRunnable != null) {
|
||||
dbRunnable.run();
|
||||
}
|
||||
if (sqlManager != null) {
|
||||
sqlManager.close();
|
||||
}
|
||||
dbRunnable = null;
|
||||
sqlManager = null;
|
||||
}
|
||||
@@ -370,6 +384,9 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect {
|
||||
}
|
||||
|
||||
public String formatMoney(double d) {
|
||||
if (d <= 0) {
|
||||
return "$0";
|
||||
}
|
||||
if (econ == null) {
|
||||
return "$" + (Math.round(d * 100) / 100.0);
|
||||
}
|
||||
@@ -401,6 +418,11 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect {
|
||||
getLogger().warning(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(Throwable t) {
|
||||
getLogger().log(Level.WARNING, t.getMessage(), t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBungee() {
|
||||
return false;
|
||||
@@ -414,4 +436,19 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect {
|
||||
public APConfig getAPConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(DbEntry dbEntry) {
|
||||
dbRunnable.add(dbEntry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runAsync(Runnable run) {
|
||||
getServer().getScheduler().runTaskAsynchronously(this, run);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runSync(Runnable run) {
|
||||
getServer().getScheduler().runTask(this, run);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package dev.heliosares.auxprotect;
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
|
||||
import dev.heliosares.auxprotect.database.DbEntry;
|
||||
import dev.heliosares.auxprotect.database.SQLManager;
|
||||
|
||||
public interface IAuxProtect {
|
||||
@@ -20,6 +21,8 @@ public interface IAuxProtect {
|
||||
void debug(String msg, int verb);
|
||||
|
||||
void warning(String msg);
|
||||
|
||||
void print(Throwable t);
|
||||
|
||||
boolean isBungee();
|
||||
|
||||
@@ -28,5 +31,10 @@ public interface IAuxProtect {
|
||||
int getDebug();
|
||||
|
||||
APConfig getAPConfig();
|
||||
|
||||
|
||||
void add(DbEntry dbEntry);
|
||||
|
||||
public void runAsync(Runnable run);
|
||||
|
||||
public void runSync(Runnable runnable);
|
||||
}
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
package dev.heliosares.auxprotect.bungee;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.UUID;
|
||||
|
||||
import dev.heliosares.auxprotect.database.DbEntry;
|
||||
import dev.heliosares.auxprotect.database.EntryAction;
|
||||
import dev.heliosares.auxprotect.database.SQLManager.LookupException;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.event.ChatEvent;
|
||||
import net.md_5.bungee.api.event.ServerConnectEvent;
|
||||
import net.md_5.bungee.api.event.LoginEvent;
|
||||
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
|
||||
import net.md_5.bungee.api.plugin.Listener;
|
||||
import net.md_5.bungee.event.EventHandler;
|
||||
import net.md_5.bungee.event.EventPriority;
|
||||
import xyz.olivermartin.multichat.bungee.Events;
|
||||
import xyz.olivermartin.multichat.bungee.MultiChat;
|
||||
import xyz.olivermartin.multichat.bungee.MultiChatUtil;
|
||||
|
||||
public class APListener implements Listener {
|
||||
public class APBListener implements Listener {
|
||||
private final AuxProtectBungee plugin;
|
||||
|
||||
public APListener(AuxProtectBungee plugin) {
|
||||
public APBListener(AuxProtectBungee plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@@ -29,8 +29,8 @@ public class APListener implements Listener {
|
||||
if (e.getSender() instanceof ProxiedPlayer) {
|
||||
ProxiedPlayer player = (ProxiedPlayer) e.getSender();
|
||||
if (e.isCommand()) {
|
||||
DbEntry entry = new DbEntry(player.getName(), EntryAction.COMMAND, false, "$null", 0, 0, 0,
|
||||
e.getMessage(), player.getUniqueId().toString());
|
||||
DbEntry entry = new DbEntry(AuxProtectBungee.getLabel(player), EntryAction.COMMAND, false,
|
||||
e.getMessage(), "");
|
||||
plugin.dbRunnable.add(entry);
|
||||
if (e.getMessage().toLowerCase().startsWith("/msg ")
|
||||
|| e.getMessage().toLowerCase().startsWith("/message ")
|
||||
@@ -54,8 +54,8 @@ public class APListener implements Listener {
|
||||
|
||||
ProxiedPlayer target = ProxyServer.getInstance()
|
||||
.getPlayer((UUID) Events.PMToggle.get(player.getUniqueId()));
|
||||
DbEntry entry = new DbEntry((player).getName(), EntryAction.MSG, false, "$null", 0, 0, 0,
|
||||
target.getName(), message);
|
||||
DbEntry entry = new DbEntry(AuxProtectBungee.getLabel(player), EntryAction.MSG, false,
|
||||
AuxProtectBungee.getLabel(target), message);
|
||||
plugin.dbRunnable.add(entry);
|
||||
}
|
||||
|
||||
@@ -70,8 +70,8 @@ public class APListener implements Listener {
|
||||
if (ProxyServer.getInstance().getPlayer(args[0]) != null) {
|
||||
ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]);
|
||||
|
||||
DbEntry entry = new DbEntry((player).getName(), EntryAction.MSG, false, "$null", 0, 0, 0,
|
||||
target.getName(), message);
|
||||
DbEntry entry = new DbEntry(AuxProtectBungee.getLabel(player), EntryAction.MSG, false,
|
||||
AuxProtectBungee.getLabel(target), message);
|
||||
plugin.dbRunnable.add(entry);
|
||||
}
|
||||
}
|
||||
@@ -85,50 +85,42 @@ public class APListener implements Listener {
|
||||
ProxiedPlayer target = ProxyServer.getInstance()
|
||||
.getPlayer((UUID) MultiChat.lastmsg.get(player.getUniqueId()));
|
||||
|
||||
DbEntry entry = new DbEntry(player.getName(), EntryAction.MSG, false, "$null", 0, 0, 0,
|
||||
target.getName(), message);
|
||||
DbEntry entry = new DbEntry(AuxProtectBungee.getLabel(player), EntryAction.MSG, false,
|
||||
AuxProtectBungee.getLabel(target), message);
|
||||
plugin.dbRunnable.add(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void serverConnectEvent(ServerConnectEvent e) {
|
||||
plugin.getSqlManager().updateUsername(e.getPlayer().getUniqueId().toString(), e.getPlayer().getName());
|
||||
Runnable run = new Runnable() {
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void serverConnectEvent(LoginEvent e) {
|
||||
if (e.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
String ip_ = ((InetSocketAddress) e.getConnection().getSocketAddress()).getAddress().toString();
|
||||
if (ip_.startsWith("/")) {
|
||||
ip_ = ip_.substring(1);
|
||||
}
|
||||
|
||||
final String ip = ip_;
|
||||
|
||||
plugin.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
HashMap<String, String> params = new HashMap<>();
|
||||
params.put("user", "$" + e.getPlayer().getUniqueId());
|
||||
params.put("action", "username");
|
||||
|
||||
ArrayList<DbEntry> results = null;
|
||||
try {
|
||||
results = plugin.getSqlManager().lookup(params, null, false);
|
||||
} catch (LookupException e1) {
|
||||
plugin.warning(e1.toString());
|
||||
return;
|
||||
}
|
||||
if (results == null)
|
||||
return;
|
||||
String newestusername = "";
|
||||
long highestusername = 0;
|
||||
for (DbEntry entry : results) {
|
||||
if (entry.getAction() == EntryAction.USERNAME) {
|
||||
if (entry.getTime() > highestusername) {
|
||||
highestusername = entry.getTime();
|
||||
newestusername = entry.getTarget();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!e.getPlayer().getName().equals(newestusername)) {
|
||||
plugin.dbRunnable.add(new DbEntry("$"+e.getPlayer().getUniqueId().toString(), EntryAction.USERNAME, false,
|
||||
"", 0, 0, 0, e.getPlayer().getName(), ""));
|
||||
}
|
||||
plugin.getSqlManager().updateUsernameAndIP(e.getConnection().getUniqueId().toString(),
|
||||
e.getConnection().getName(), ip);
|
||||
}
|
||||
};
|
||||
plugin.getProxy().getScheduler().runAsync(plugin, run);
|
||||
});
|
||||
plugin.dbRunnable.add(new DbEntry("$" + e.getConnection().getUniqueId().toString(), EntryAction.SESSION, true,
|
||||
"", "IP: " + ip));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDisconnect(PlayerDisconnectEvent e) {
|
||||
plugin.dbRunnable
|
||||
.add(new DbEntry(AuxProtectBungee.getLabel(e.getPlayer()), EntryAction.SESSION, false, "", ""));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,25 +4,35 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.sql.SQLException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.bukkit.block.Container;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.Acrobot.ChestShop.ChestShop;
|
||||
|
||||
import dev.heliosares.auxprotect.APConfig;
|
||||
import dev.heliosares.auxprotect.AuxProtect;
|
||||
import dev.heliosares.auxprotect.IAuxProtect;
|
||||
import dev.heliosares.auxprotect.bungee.command.APCommand;
|
||||
import dev.heliosares.auxprotect.bungee.command.APBCommand;
|
||||
import dev.heliosares.auxprotect.command.PurgeCommand;
|
||||
import dev.heliosares.auxprotect.database.DatabaseRunnable;
|
||||
import dev.heliosares.auxprotect.database.DbEntry;
|
||||
import dev.heliosares.auxprotect.database.SQLManager;
|
||||
import dev.heliosares.auxprotect.listeners.ChestShopListener;
|
||||
import dev.heliosares.auxprotect.listeners.EntityListener;
|
||||
import dev.heliosares.auxprotect.listeners.ShopGUIPlusListener;
|
||||
import dev.heliosares.auxprotect.utils.MySender;
|
||||
import dev.heliosares.auxprotect.listeners.InventoryListener;
|
||||
import dev.heliosares.auxprotect.listeners.ProjectileListener;
|
||||
import net.brcdev.shopgui.ShopGuiPlugin;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.plugin.Listener;
|
||||
import net.md_5.bungee.api.plugin.Plugin;
|
||||
import net.md_5.bungee.config.Configuration;
|
||||
@@ -44,39 +54,85 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect {
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
getProxy().getPluginManager().registerCommand(this, new APCommand(this));
|
||||
getProxy().getPluginManager().registerListener(this, new APListener(this));
|
||||
getProxy().getPluginManager().registerCommand(this, new APBCommand(this));
|
||||
getProxy().getPluginManager().registerListener(this, new APBListener(this));
|
||||
|
||||
loadConfig();
|
||||
YMLManager langManager = new YMLManager("en-us.yml", this);
|
||||
langManager.load();
|
||||
lang = new Language(langManager.getData());
|
||||
|
||||
File sqliteFile = new File(getDataFolder(), "database/auxprotect.db");
|
||||
if (!sqliteFile.getParentFile().exists()) {
|
||||
if (!sqliteFile.getParentFile().mkdirs()) {
|
||||
this.getLogger().severe("Failed to create database directory.");
|
||||
this.onDisable();
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!sqliteFile.exists()) {
|
||||
try {
|
||||
if (!sqliteFile.createNewFile()) {
|
||||
throw new IOException();
|
||||
boolean mysql = config.getBoolean("MySQL.use", false);
|
||||
String user = config.getString("MySQL.username", "");
|
||||
String pass = config.getString("MySQL.password", "");
|
||||
String uri = "";
|
||||
if (mysql) {
|
||||
String host = config.getString("MySQL.host", "localhost");
|
||||
String port = config.getString("MySQL.port", "3306");
|
||||
String database = config.getString("MySQL.database", "database");
|
||||
uri = String.format("jdbc:mysql://%s:%s/%s", host, port, database);
|
||||
} else {
|
||||
File sqliteFile = new File(getDataFolder(), "database/auxprotect.db");
|
||||
if (!sqliteFile.getParentFile().exists()) {
|
||||
if (!sqliteFile.getParentFile().mkdirs()) {
|
||||
this.getLogger().severe("Failed to create database directory.");
|
||||
this.onDisable();
|
||||
return;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
this.getLogger().severe("Failed to create database file.");
|
||||
this.onDisable();
|
||||
return;
|
||||
}
|
||||
if (!sqliteFile.exists()) {
|
||||
try {
|
||||
if (!sqliteFile.createNewFile()) {
|
||||
throw new IOException();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
this.getLogger().severe("Failed to create database file.");
|
||||
this.onDisable();
|
||||
return;
|
||||
}
|
||||
}
|
||||
uri = "jdbc:sqlite:" + sqliteFile.getAbsolutePath();
|
||||
}
|
||||
sqlManager = new SQLManager(this, "jdbc:sqlite:" + sqliteFile.getAbsolutePath(), null);
|
||||
if (!sqlManager.connect()) {
|
||||
this.getLogger().severe("Failed to connect to SQL database. Disabling.");
|
||||
this.onDisable();
|
||||
return;
|
||||
}
|
||||
sqlManager = new SQLManager(this, uri, config.getString("MySQL.table-prefix"));
|
||||
|
||||
runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
if (mysql) {
|
||||
sqlManager.connect(user, pass);
|
||||
} else {
|
||||
sqlManager.connect();
|
||||
}
|
||||
sqlManager.count();
|
||||
} catch (SQLException e) {
|
||||
print(e);
|
||||
getLogger().severe("Failed to connect to SQL database. Disabling.");
|
||||
onDisable();
|
||||
return;
|
||||
}
|
||||
|
||||
for (Object command : config.getList("purge-cmds")) {
|
||||
String cmd = (String) command;
|
||||
String[] argsOld = cmd.split(" ");
|
||||
String[] args = new String[argsOld.length + 1];
|
||||
args[0] = "purge";
|
||||
for (int i = 0; i < argsOld.length; i++) {
|
||||
args[i + 1] = argsOld[i];
|
||||
}
|
||||
PurgeCommand.purge(AuxProtectBungee.this, new MySender(getProxy().getConsole()), args);
|
||||
}
|
||||
sqlManager.purgeUIDs();
|
||||
|
||||
try {
|
||||
sqlManager.vacuum();
|
||||
} catch (SQLException e) {
|
||||
print(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
dbRunnable = new DatabaseRunnable(this, sqlManager);
|
||||
|
||||
getProxy().getScheduler().schedule(this, dbRunnable, 250, 250, TimeUnit.MILLISECONDS);
|
||||
@@ -86,8 +142,12 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect {
|
||||
public void onDisable() {
|
||||
getProxy().getPluginManager().unregisterListeners(this);
|
||||
getProxy().getPluginManager().unregisterCommands(this);
|
||||
if (sqlManager != null)
|
||||
if (dbRunnable != null) {
|
||||
dbRunnable.run();
|
||||
}
|
||||
if (sqlManager != null) {
|
||||
sqlManager.close();
|
||||
}
|
||||
}
|
||||
|
||||
public static void tell(CommandSender to, String message) {
|
||||
@@ -105,14 +165,14 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect {
|
||||
try (InputStream in = getResourceAsStream("config.yml")) {
|
||||
Files.copy(in, file.toPath());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
print(e);
|
||||
}
|
||||
}
|
||||
try {
|
||||
config = ConfigurationProvider.getProvider(YamlConfiguration.class)
|
||||
.load(new File(getDataFolder(), "config.yml"));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
print(e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,6 +214,11 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect {
|
||||
getLogger().warning(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(Throwable t) {
|
||||
getLogger().log(Level.WARNING, t.getMessage(), t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBungee() {
|
||||
return true;
|
||||
@@ -173,4 +238,30 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect {
|
||||
// TODO Implement APConfig
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(DbEntry dbEntry) {
|
||||
dbRunnable.add(dbEntry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runAsync(Runnable run) {
|
||||
getProxy().getScheduler().runAsync(this, run);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runSync(Runnable run) {
|
||||
runAsync(run);
|
||||
}
|
||||
|
||||
public static String getLabel(Object o) {
|
||||
if (o == null) {
|
||||
return "#null";
|
||||
}
|
||||
if (o instanceof ProxiedPlayer) {
|
||||
return "$" + ((ProxiedPlayer) o).getUniqueId().toString();
|
||||
}
|
||||
return "#null";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import net.md_5.bungee.config.Configuration;
|
||||
|
||||
public class Language {
|
||||
private Configuration lang;
|
||||
|
||||
HashMap<String, String> langMap;
|
||||
|
||||
public Language(Configuration lang) {
|
||||
|
||||
@@ -1,136 +0,0 @@
|
||||
package dev.heliosares.auxprotect.bungee;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import dev.heliosares.auxprotect.AuxProtect;
|
||||
import dev.heliosares.auxprotect.IAuxProtect;
|
||||
import dev.heliosares.auxprotect.database.DbEntry;
|
||||
import dev.heliosares.auxprotect.database.EntryAction;
|
||||
import dev.heliosares.auxprotect.utils.InvSerialization;
|
||||
import dev.heliosares.auxprotect.utils.MyPermission;
|
||||
import dev.heliosares.auxprotect.utils.TimeUtil;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.chat.HoverEvent;
|
||||
import net.md_5.bungee.api.chat.hover.content.Text;
|
||||
|
||||
public class Results {
|
||||
|
||||
protected final ArrayList<DbEntry> entries;
|
||||
protected final CommandSender player;
|
||||
protected final DateTimeFormatter formatter;
|
||||
private final IAuxProtect plugin;
|
||||
public int perpage = 4;
|
||||
public int prevpage = 0;
|
||||
|
||||
public Results(IAuxProtect plugin, ArrayList<DbEntry> entries, CommandSender player) {
|
||||
this.entries = entries;
|
||||
this.player = player;
|
||||
this.formatter = DateTimeFormatter.ofPattern("ddMMMYY HH:mm.ss");
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public void showPage(int page, int perpage_) {
|
||||
int lastpage = getLastPage(perpage_);
|
||||
if (page > lastpage || page < 1) {
|
||||
AuxProtectBungee.tell(player, AuxProtect.getInstance().translate("lookup-nopage"));
|
||||
return;
|
||||
}
|
||||
perpage = perpage_;
|
||||
prevpage = page;
|
||||
AuxProtectBungee.tell(player, "§f------ §9AuxProtect Results§7 ------");
|
||||
for (int i = (page - 1) * perpage; i < (page) * perpage && i < entries.size(); i++) {
|
||||
DbEntry en = entries.get(i);
|
||||
ComponentBuilder message = new ComponentBuilder();
|
||||
|
||||
message.append(String.format("§7%s ago", TimeUtil.millisToString(System.currentTimeMillis() - en.getTime()),
|
||||
en.getUser(plugin.getSqlManager())))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||
new Text(Instant.ofEpochMilli(en.getTime()).atZone(ZoneId.systemDefault()).format(formatter)
|
||||
+ "\n§7Click to copy epoch time.")))
|
||||
.event(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, en.getTime() + "e"));
|
||||
|
||||
message.append(String.format(" §f- §9%s §f%s §9%s§f", en.getUser(plugin.getSqlManager()),
|
||||
plugin.translate(en.getAction().getLang(en.getState())), en.getTarget())).event((HoverEvent) null);
|
||||
String data = en.getData();
|
||||
if (data != null && data.contains(InvSerialization.itemSeparator)) {
|
||||
data = data.split(InvSerialization.itemSeparator)[0];
|
||||
if (MyPermission.INV.hasPermission(player)) {
|
||||
message.append(" §a[View]")
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/ap inv %d", i)))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to view!")));
|
||||
}
|
||||
}
|
||||
if (en.getAction() == EntryAction.INVENTORY) {
|
||||
if (MyPermission.INV.hasPermission(player)) {
|
||||
message.append(" §a[View]")
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/ap inv %d", i)))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to view!")));
|
||||
}
|
||||
} else if (en.getAction() == EntryAction.KILL) {
|
||||
if (MyPermission.INV.hasPermission(player) && !en.getTarget().startsWith("#")) {
|
||||
message.append(" §a[View Inv]")
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
String.format("/ap l u:%s a:inventory target:death before:%de after:%de",
|
||||
en.getTarget(), en.getTime() + 50L, en.getTime() - 50L)))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to view!")));
|
||||
}
|
||||
message.append(" §7(" + data + ")");
|
||||
} else if (data != null && data.length() > 0) {
|
||||
message.append(" §7(" + data + ")");
|
||||
}
|
||||
if (en.world != null && !en.world.equals("$null")) {
|
||||
message.append(String.format("\n §7§l^ §7(x%d/y%d/z%d/%s)", en.x, en.y, en.z, en.world))
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
String.format("/ap tp %d %d %d %s", en.x, en.y, en.z, en.world)))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to Teleport!")));
|
||||
}
|
||||
player.sendMessage(message.create());
|
||||
}
|
||||
|
||||
ComponentBuilder message = new ComponentBuilder();
|
||||
message.append("§7(");
|
||||
if (page > 1) {
|
||||
message.append("§9§l" + AuxProtect.LEFT_ARROW + AuxProtect.LEFT_ARROW)
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ap l 1:" + perpage))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§9Jump to First Page")));
|
||||
message.append(" ").event((ClickEvent) null).event((HoverEvent) null);
|
||||
message.append("§9§l" + AuxProtect.LEFT_ARROW)
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ap l " + (page - 1) + ":" + perpage))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Last Page")));
|
||||
} else {
|
||||
message.event(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, ""));
|
||||
message.append("§8§l" + AuxProtect.LEFT_ARROW + AuxProtect.LEFT_ARROW).event((ClickEvent) null)
|
||||
.event((HoverEvent) null);
|
||||
message.append(" ");
|
||||
message.append("§8§l" + AuxProtect.LEFT_ARROW);
|
||||
}
|
||||
message.append(" ").event((ClickEvent) null).event((HoverEvent) null);
|
||||
if (page < lastpage) {
|
||||
message.append("§9§l" + AuxProtect.RIGHT_ARROW)
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ap l " + (page + 1) + ":" + perpage))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Next Page")));
|
||||
message.append(" ").event((ClickEvent) null).event((HoverEvent) null);
|
||||
message.append("§9§l" + AuxProtect.RIGHT_ARROW + AuxProtect.RIGHT_ARROW)
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ap l " + lastpage + ":" + perpage))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Jump to Last Page")));
|
||||
} else {
|
||||
message.append("§8§l" + AuxProtect.RIGHT_ARROW).event((ClickEvent) null).event((HoverEvent) null);
|
||||
message.append(" ");
|
||||
message.append("§8§l" + AuxProtect.RIGHT_ARROW + AuxProtect.RIGHT_ARROW);
|
||||
}
|
||||
message.append("§7) ").event((ClickEvent) null).event((HoverEvent) null);
|
||||
message.append(String.format(plugin.translate("lookup-page-footer"), page,
|
||||
(int) Math.ceil(entries.size() / (double) perpage), entries.size()));
|
||||
player.sendMessage(message.create());
|
||||
return;
|
||||
}
|
||||
|
||||
public int getLastPage(int perpage) {
|
||||
return (int) Math.ceil(entries.size() / (double) perpage);
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@ public class YMLManager {
|
||||
try (InputStream in = plugin.getResourceAsStream(fileName)) {
|
||||
Files.copy(in, file.toPath());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
plugin.print(e);
|
||||
}
|
||||
}
|
||||
reload();
|
||||
@@ -56,7 +56,7 @@ public class YMLManager {
|
||||
this.data = ConfigurationProvider.getProvider(YamlConfiguration.class)
|
||||
.load(new File(plugin.getDataFolder(), fileName));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
plugin.print(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,20 +5,24 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import dev.heliosares.auxprotect.bungee.AuxProtectBungee;
|
||||
import dev.heliosares.auxprotect.command.LookupCommand;
|
||||
import dev.heliosares.auxprotect.command.PurgeCommand;
|
||||
import dev.heliosares.auxprotect.database.EntryAction;
|
||||
import dev.heliosares.auxprotect.utils.MyPermission;
|
||||
import dev.heliosares.auxprotect.utils.MySender;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.plugin.Command;
|
||||
import net.md_5.bungee.api.plugin.TabExecutor;
|
||||
|
||||
public class APCommand extends Command implements TabExecutor {
|
||||
public class APBCommand extends Command implements TabExecutor {
|
||||
|
||||
private AuxProtectBungee plugin;
|
||||
private LookupCommand lookupCommand;
|
||||
|
||||
public APCommand(AuxProtectBungee plugin) {
|
||||
public APBCommand(AuxProtectBungee plugin) {
|
||||
super("apb");
|
||||
this.plugin = plugin;
|
||||
lookupCommand = new LookupCommand(plugin);
|
||||
}
|
||||
|
||||
private void sendHelpMessage(CommandSender sender, String subcommand) {
|
||||
@@ -53,7 +57,7 @@ public class APCommand extends Command implements TabExecutor {
|
||||
AuxProtectBungee.tell(sender, plugin.lang.translate("no-permission"));
|
||||
return;
|
||||
}
|
||||
lookupCommand.onCommand(sender, args);
|
||||
LookupCommand.onCommand(plugin, new MySender(sender), args);
|
||||
return;
|
||||
} else if (args[0].equalsIgnoreCase("help")) {
|
||||
if (!MyPermission.HELP.hasPermission(sender)) {
|
||||
@@ -117,11 +121,18 @@ public class APCommand extends Command implements TabExecutor {
|
||||
plugin.getSqlManager().execute(msg.trim());
|
||||
} catch (SQLException e) {
|
||||
AuxProtectBungee.tell(sender, "§cAn error occured.");
|
||||
e.printStackTrace();
|
||||
plugin.print(e);
|
||||
return;
|
||||
}
|
||||
AuxProtectBungee.tell(sender, "§aSQL statement executed successfully.");
|
||||
return;
|
||||
} else if (args[0].equalsIgnoreCase("purge")) {
|
||||
if (!MyPermission.PURGE.hasPermission(sender)) {
|
||||
AuxProtectBungee.tell(sender, plugin.lang.translate("no-permission"));
|
||||
return;
|
||||
}
|
||||
PurgeCommand.purge(plugin, new MySender(sender), args);
|
||||
return;
|
||||
} else {
|
||||
AuxProtectBungee.tell(sender, plugin.lang.translate("unknown-subcommand"));
|
||||
return;
|
||||
@@ -138,7 +149,6 @@ public class APCommand extends Command implements TabExecutor {
|
||||
if (args.length == 1) {
|
||||
if (MyPermission.LOOKUP.hasPermission(sender)) {
|
||||
possible.add("lookup");
|
||||
possible.add("playtime");
|
||||
}
|
||||
if (MyPermission.ADMIN.hasPermission(sender)) {
|
||||
possible.add("debug");
|
||||
@@ -154,7 +164,56 @@ public class APCommand extends Command implements TabExecutor {
|
||||
if (args.length >= 2) {
|
||||
if ((args[0].equalsIgnoreCase("lookup") || args[0].equalsIgnoreCase("l"))
|
||||
&& MyPermission.LOOKUP.hasPermission(sender)) {
|
||||
possible.addAll(lookupCommand.onTabComplete(sender, args));
|
||||
possible.add("time:");
|
||||
possible.add("target:");
|
||||
possible.add("action:");
|
||||
possible.add("user:");
|
||||
if (currentArg.startsWith("action:") || currentArg.startsWith("a:")) {
|
||||
String action = currentArg.split(":")[0] + ":";
|
||||
for (EntryAction eaction : EntryAction.values()) {
|
||||
if (eaction.isBungee() && eaction.isEnabled()) {
|
||||
String actString = eaction.toString().toLowerCase();
|
||||
if (eaction.hasDual) {
|
||||
possible.add(action + "+" + actString);
|
||||
possible.add(action + "-" + actString);
|
||||
|
||||
}
|
||||
possible.add(action + actString);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (currentArg.startsWith("user:") || currentArg.startsWith("u:") || currentArg.startsWith("target:")) {
|
||||
String user = currentArg.split(":")[0] + ":";
|
||||
for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) {
|
||||
possible.add(user + player.getName());
|
||||
}
|
||||
}
|
||||
if (currentArg.startsWith("time:") || currentArg.startsWith("t:")) {
|
||||
if (currentArg.matches("t(ime)?:\\d+")) {
|
||||
possible.add(currentArg + "s");
|
||||
possible.add(currentArg + "m");
|
||||
possible.add(currentArg + "h");
|
||||
possible.add(currentArg + "d");
|
||||
possible.add(currentArg + "w");
|
||||
}
|
||||
}
|
||||
if (currentArg.startsWith("b"))
|
||||
possible.add("before:");
|
||||
if (currentArg.startsWith("a"))
|
||||
possible.add("after:");
|
||||
|
||||
if (currentArg.startsWith("#")) {
|
||||
possible.add("#bw");
|
||||
possible.add("#count");
|
||||
}
|
||||
|
||||
for (int i = 1; i < args.length - 1; i++) {
|
||||
String arg = args[i];
|
||||
if (!arg.contains(":"))
|
||||
continue;
|
||||
arg = arg.substring(0, arg.indexOf(":") + 1);
|
||||
possible.remove(arg);
|
||||
}
|
||||
} else if ((args[0].equalsIgnoreCase("help")) && MyPermission.HELP.hasPermission(sender)) {
|
||||
possible.add("lookup");
|
||||
possible.add("purge");
|
||||
@@ -1,353 +0,0 @@
|
||||
package dev.heliosares.auxprotect.bungee.command;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import dev.heliosares.auxprotect.bungee.AuxProtectBungee;
|
||||
import dev.heliosares.auxprotect.bungee.Results;
|
||||
import dev.heliosares.auxprotect.database.DbEntry;
|
||||
import dev.heliosares.auxprotect.database.EntryAction;
|
||||
import dev.heliosares.auxprotect.database.SQLManager.LookupException;
|
||||
import dev.heliosares.auxprotect.utils.MyPermission;
|
||||
import dev.heliosares.auxprotect.utils.PlayTimeSolver;
|
||||
import dev.heliosares.auxprotect.utils.TimeUtil;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
public class LookupCommand {
|
||||
|
||||
private AuxProtectBungee plugin;
|
||||
|
||||
private ArrayList<String> validParams;
|
||||
|
||||
public LookupCommand(AuxProtectBungee plugin) {
|
||||
this.plugin = plugin;
|
||||
results = new HashMap<>();
|
||||
validParams = new ArrayList<>();
|
||||
validParams.add("action");
|
||||
validParams.add("after");
|
||||
validParams.add("before");
|
||||
validParams.add("target");
|
||||
validParams.add("time");
|
||||
validParams.add("world");
|
||||
validParams.add("user");
|
||||
validParams.add("radius");
|
||||
}
|
||||
|
||||
HashMap<String, Results> results;
|
||||
|
||||
public boolean onCommand(final CommandSender sender, String[] args) {
|
||||
if (args.length < 2) {
|
||||
AuxProtectBungee.tell(sender, plugin.lang.translate("lookup-invalid-syntax"));
|
||||
return true;
|
||||
}
|
||||
Player player_ = null;
|
||||
if (sender instanceof Player) {
|
||||
player_ = (Player) sender;
|
||||
}
|
||||
final Player player = player_;
|
||||
if (args.length == 2) {
|
||||
int page = -1;
|
||||
int perpage = -1;
|
||||
boolean isPageLookup = false;
|
||||
boolean next = args[1].equalsIgnoreCase("next");
|
||||
boolean prev = args[1].equalsIgnoreCase("prev");
|
||||
boolean first = args[1].equalsIgnoreCase("first");
|
||||
boolean last = args[1].equalsIgnoreCase("last");
|
||||
if (!next && !prev && !first && !last) {
|
||||
if (args[1].contains(":")) {
|
||||
String[] split = args[1].split(":");
|
||||
try {
|
||||
page = Integer.parseInt(split[0]);
|
||||
perpage = Integer.parseInt(split[1]);
|
||||
isPageLookup = true;
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
page = Integer.parseInt(args[1]);
|
||||
isPageLookup = true;
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isPageLookup || first || last || next || prev) {
|
||||
Results result = null;
|
||||
String uuid = "nonplayer";
|
||||
if (sender instanceof Player) {
|
||||
uuid = ((Player) sender).getUniqueId().toString();
|
||||
}
|
||||
if (results.containsKey(uuid)) {
|
||||
result = results.get(uuid);
|
||||
}
|
||||
if (result == null) {
|
||||
AuxProtectBungee.tell(sender, plugin.lang.translate("lookup-no-results-selected"));
|
||||
return true;
|
||||
}
|
||||
if (perpage == -1) {
|
||||
perpage = result.perpage;
|
||||
}
|
||||
if (first) {
|
||||
page = 1;
|
||||
} else if (last) {
|
||||
page = result.getLastPage(result.perpage);
|
||||
} else if (next) {
|
||||
page = result.prevpage + 1;
|
||||
} else if (prev) {
|
||||
page = result.prevpage - 1;
|
||||
}
|
||||
if (perpage > 0) {
|
||||
if (perpage > 100) {
|
||||
perpage = 100;
|
||||
}
|
||||
result.showPage(page, perpage);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HashMap<String, String> params = new HashMap<>();
|
||||
boolean count = false;
|
||||
boolean playtime = false;
|
||||
boolean bw = false;
|
||||
long startTime = 0;
|
||||
for (int i = 1; i < args.length; i++) {
|
||||
if (args[i].equalsIgnoreCase("#count")) {
|
||||
count = true;
|
||||
continue;
|
||||
} else if (args[i].equalsIgnoreCase("#bw")) {
|
||||
bw = true;
|
||||
continue;
|
||||
} else if (args[i].equalsIgnoreCase("#pt")) {
|
||||
if (!MyPermission.LOOKUP_PLAYTIME.hasPermission(sender)) {
|
||||
AuxProtectBungee.tell(sender, plugin.translate("no-permission-flag"));
|
||||
return true;
|
||||
}
|
||||
playtime = true;
|
||||
continue;
|
||||
}
|
||||
String[] split = args[i].split(":");
|
||||
|
||||
String token = split[0];
|
||||
switch (token.toLowerCase()) {
|
||||
case "a":
|
||||
token = "action";
|
||||
break;
|
||||
case "u":
|
||||
token = "user";
|
||||
break;
|
||||
case "t":
|
||||
token = "time";
|
||||
break;
|
||||
case "r":
|
||||
token = "radius";
|
||||
break;
|
||||
case "w":
|
||||
token = "world";
|
||||
break;
|
||||
}
|
||||
if (token.equalsIgnoreCase("db")) {
|
||||
if (!MyPermission.ADMIN.hasPermission(sender)) {
|
||||
AuxProtectBungee.tell(sender, plugin.translate("no-permission"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (split.length != 2 || !validParams.contains(token)) {
|
||||
AuxProtectBungee.tell(sender, String.format(plugin.translate("lookup-invalid-parameter"), args[i]));
|
||||
return true;
|
||||
}
|
||||
String param = split[1];
|
||||
if (token.equalsIgnoreCase("time") || token.equalsIgnoreCase("before") || token.equalsIgnoreCase("after")) {
|
||||
if (param.endsWith("e")) {
|
||||
long time = -1;
|
||||
try {
|
||||
time = Long.parseLong(param.substring(0, param.length() - 1));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
if (time < 0) {
|
||||
AuxProtectBungee.tell(sender,
|
||||
String.format(plugin.translate("lookup-invalid-parameter"), args[i]));
|
||||
return true;
|
||||
}
|
||||
param = time + "";
|
||||
} else {
|
||||
startTime = TimeUtil.convertTime(param);
|
||||
if (startTime < 0) {
|
||||
AuxProtectBungee.tell(sender,
|
||||
String.format(plugin.lang.translate("lookup-invalid-parameter"), args[i]));
|
||||
return true;
|
||||
}
|
||||
param = (System.currentTimeMillis() - startTime) + "";
|
||||
}
|
||||
}
|
||||
params.put(token, param.toLowerCase());
|
||||
}
|
||||
if (params.size() < 1) {
|
||||
AuxProtectBungee.tell(sender, plugin.lang.translate("purge-error-notenough"));
|
||||
return true;
|
||||
}
|
||||
if (bw) {
|
||||
String user = params.get("user");
|
||||
final String targetOld = params.get("target");
|
||||
String target = params.get("target");
|
||||
if (user == null) {
|
||||
user = "";
|
||||
}
|
||||
if (target == null) {
|
||||
target = "";
|
||||
}
|
||||
if (user.length() > 0) {
|
||||
if (targetOld != null && targetOld.length() > 0) {
|
||||
target += ",";
|
||||
}
|
||||
target += user;
|
||||
}
|
||||
if (targetOld != null && targetOld.length() > 0) {
|
||||
if (user.length() > 0) {
|
||||
user += ",";
|
||||
}
|
||||
user += targetOld;
|
||||
}
|
||||
if (user.length() > 0) {
|
||||
params.put("user", user);
|
||||
}
|
||||
if (target.length() > 0) {
|
||||
params.put("target", target);
|
||||
}
|
||||
}
|
||||
if (playtime) {
|
||||
if (params.containsKey("user")) {
|
||||
if (params.get("user").split(",").length > 1) {
|
||||
AuxProtectBungee.tell(sender, plugin.translate("lookup-playtime-toomanyusers"));
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
AuxProtectBungee.tell(sender, plugin.translate("lookup-playtime-nouser"));
|
||||
return true;
|
||||
}
|
||||
if (params.containsKey("action")) {
|
||||
params.remove("action");
|
||||
params.put("action", "session");
|
||||
}
|
||||
}
|
||||
final boolean count_ = count;
|
||||
final boolean playtime_ = playtime;
|
||||
final long startTime_ = startTime;
|
||||
AuxProtectBungee.tell(sender, plugin.translate("lookup-looking"));
|
||||
Runnable runnable = new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
ArrayList<DbEntry> results = null;
|
||||
try {
|
||||
results = plugin.getSqlManager().lookup(params, player != null ? player.getLocation() : null,
|
||||
false);
|
||||
} catch (LookupException e) {
|
||||
AuxProtectBungee.tell(sender, e.errorMessage);
|
||||
return;
|
||||
}
|
||||
if (results == null || results.size() == 0) {
|
||||
AuxProtectBungee.tell(sender, plugin.translate("lookup-noresults"));
|
||||
return;
|
||||
}
|
||||
if (count_) {
|
||||
AuxProtectBungee.tell(sender, String.format(plugin.translate("lookup-count"), results.size()));
|
||||
} else if (playtime_) {
|
||||
String users = params.get("user");
|
||||
if (users == null) {
|
||||
AuxProtectBungee.tell(sender, plugin.translate("playtime-nouser"));
|
||||
return;
|
||||
}
|
||||
if (users.contains(",")) {
|
||||
AuxProtectBungee.tell(sender, plugin.translate("playtime-toomanyusers"));
|
||||
return;
|
||||
}
|
||||
sender.sendMessage(
|
||||
PlayTimeSolver.solvePlaytime(results, (int) Math.round(startTime_ / (1000 * 3600)), users));
|
||||
} else {
|
||||
String uuid = "nonplayer";
|
||||
if (player != null) {
|
||||
uuid = player.getUniqueId().toString();
|
||||
}
|
||||
Results result = new Results(plugin, results, sender);
|
||||
result.showPage(1, 4);
|
||||
LookupCommand.this.results.put(uuid, result);
|
||||
}
|
||||
}
|
||||
};
|
||||
// plugin.dbRunnable.scheduleLookup(runnable);
|
||||
plugin.dbRunnable.scheduleLookup(runnable);
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<String> onTabComplete(CommandSender sender, String[] args) {
|
||||
List<String> possible = new ArrayList<>();
|
||||
String currentArg = args[args.length - 1];
|
||||
|
||||
possible.add("radius:");
|
||||
possible.add("time:");
|
||||
possible.add("target:");
|
||||
possible.add("action:");
|
||||
possible.add("world:");
|
||||
possible.add("user:");
|
||||
if (currentArg.startsWith("action:") || currentArg.startsWith("a:")) {
|
||||
String action = currentArg.split(":")[0] + ":";
|
||||
for (EntryAction eaction : EntryAction.values()) {
|
||||
if (eaction.isBungee() && eaction.isEnabled()) {
|
||||
String actString = eaction.toString().toLowerCase();
|
||||
if (eaction.hasDual) {
|
||||
possible.add(action + "+" + actString);
|
||||
possible.add(action + "-" + actString);
|
||||
|
||||
}
|
||||
possible.add(action + actString);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (currentArg.startsWith("user:") || currentArg.startsWith("u:") || currentArg.startsWith("target:")) {
|
||||
String user = currentArg.split(":")[0] + ":";
|
||||
for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) {
|
||||
possible.add(user + player.getName());
|
||||
}
|
||||
}
|
||||
if (currentArg.startsWith("time:") || currentArg.startsWith("t:")) {
|
||||
if (currentArg.matches("t(ime)?:\\d+")) {
|
||||
possible.add(currentArg + "s");
|
||||
possible.add(currentArg + "m");
|
||||
possible.add(currentArg + "h");
|
||||
possible.add(currentArg + "d");
|
||||
possible.add(currentArg + "w");
|
||||
}
|
||||
}
|
||||
if (currentArg.startsWith("b"))
|
||||
possible.add("before:");
|
||||
if (currentArg.startsWith("a"))
|
||||
possible.add("after:");
|
||||
|
||||
if (currentArg.startsWith("#")) {
|
||||
/*
|
||||
* if (MyPermission.LOOKUP_PLAYTIME.hasPermission(sender)) {
|
||||
* possible.add("#pt"); }
|
||||
*/
|
||||
possible.add("#bw");
|
||||
possible.add("#time");
|
||||
possible.add("#count");
|
||||
}
|
||||
|
||||
for (int i = 1; i < args.length - 1; i++) {
|
||||
String arg = args[i];
|
||||
if (!arg.contains(":"))
|
||||
continue;
|
||||
arg = arg.substring(0, arg.indexOf(":") + 1);
|
||||
possible.remove(arg);
|
||||
}
|
||||
|
||||
List<String> output = new ArrayList<>();
|
||||
APCommand.copyPartialMatches(currentArg, possible, output);
|
||||
return output;
|
||||
}
|
||||
}
|
||||
@@ -12,13 +12,13 @@ import org.bukkit.command.CommandSender;
|
||||
|
||||
import dev.heliosares.auxprotect.AuxProtect;
|
||||
import dev.heliosares.auxprotect.utils.MyPermission;
|
||||
import dev.heliosares.auxprotect.utils.MySender;
|
||||
import dev.heliosares.auxprotect.utils.TimeUtil;
|
||||
|
||||
public class APCommand implements CommandExecutor {
|
||||
|
||||
private AuxProtect plugin;
|
||||
public LookupCommand lookupCommand;
|
||||
private PurgeCommand purgeCommand;
|
||||
private TpCommand tpCommand;
|
||||
private InvCommand invCommand;
|
||||
private PlaytimeCommand playtimeCommand;
|
||||
@@ -28,7 +28,6 @@ public class APCommand implements CommandExecutor {
|
||||
public APCommand(AuxProtect plugin) {
|
||||
this.plugin = plugin;
|
||||
lookupCommand = new LookupCommand(plugin);
|
||||
purgeCommand = new PurgeCommand(plugin);
|
||||
tpCommand = new TpCommand(plugin);
|
||||
invCommand = new InvCommand(plugin, this);
|
||||
playtimeCommand = new PlaytimeCommand(plugin);
|
||||
@@ -44,13 +43,14 @@ public class APCommand implements CommandExecutor {
|
||||
sender.sendMessage(plugin.translate("no-permission"));
|
||||
return true;
|
||||
}
|
||||
return lookupCommand.onCommand(sender, command, label, args);
|
||||
return lookupCommand.onCommand(sender, args);
|
||||
} else if (args[0].equalsIgnoreCase("purge")) {
|
||||
if (!MyPermission.PURGE.hasPermission(sender)) {
|
||||
sender.sendMessage(plugin.translate("no-permission"));
|
||||
return true;
|
||||
}
|
||||
return purgeCommand.onCommand(sender, command, label, args);
|
||||
PurgeCommand.purge(plugin, new MySender(sender), args);
|
||||
return true;
|
||||
} else if (args[0].equalsIgnoreCase("pt") || args[0].equalsIgnoreCase("playtime")) {
|
||||
if (!MyPermission.LOOKUP_PLAYTIME.hasPermission(sender)) {
|
||||
sender.sendMessage(plugin.translate("no-permission"));
|
||||
@@ -167,7 +167,8 @@ public class APCommand implements CommandExecutor {
|
||||
return true;
|
||||
}
|
||||
|
||||
sender.sendMessage("§7Rows: §9" + plugin.getSqlManager().getCount());
|
||||
sender.sendMessage("§7Rows: §9" + plugin.getSqlManager().getCount() + " §7DB Version: §9"
|
||||
+ plugin.getSqlManager().getVersion());
|
||||
sender.sendMessage("§7Average lookup time: §9"
|
||||
+ Math.round(plugin.getSqlManager().lookupTime.getMean() / 1000.0) / 1000.0 + "§7ms");
|
||||
sender.sendMessage("§7Average record time per entry: §9"
|
||||
@@ -201,7 +202,7 @@ public class APCommand implements CommandExecutor {
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
sender.sendMessage("§cAn error occured.");
|
||||
e.printStackTrace();
|
||||
plugin.print(e);
|
||||
return true;
|
||||
}
|
||||
sender.sendMessage("§aSQL statement executed successfully.");
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package dev.heliosares.auxprotect.command;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -32,16 +31,11 @@ import net.md_5.bungee.api.chat.hover.content.Text;
|
||||
public class InvCommand implements CommandExecutor {
|
||||
|
||||
private AuxProtect plugin;
|
||||
private APCommand command;
|
||||
|
||||
public InvCommand(AuxProtect plugin, APCommand command) {
|
||||
this.plugin = plugin;
|
||||
results = new HashMap<>();
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
HashMap<String, Results> results;
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (args.length < 2) {
|
||||
@@ -60,7 +54,7 @@ public class InvCommand implements CommandExecutor {
|
||||
if (idnex < 0) {
|
||||
return true;
|
||||
}
|
||||
Results results = this.command.lookupCommand.results.get(player.getUniqueId().toString());
|
||||
Results results = LookupCommand.results.get(player.getUniqueId().toString());
|
||||
if (results == null || idnex >= results.getSize()) {
|
||||
return true;
|
||||
}
|
||||
@@ -75,7 +69,7 @@ public class InvCommand implements CommandExecutor {
|
||||
final ItemStack[] storage = InvSerialization.toItemStackArray(data[0]);
|
||||
final ItemStack[] armor = InvSerialization.toItemStackArray(data[1]);
|
||||
final ItemStack[] extra = InvSerialization.toItemStackArray(data[2]);
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(UUID.fromString(entry.userUuid.substring(1)));
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(UUID.fromString(entry.getUserUUID().substring(1)));
|
||||
final Player targetO = target.getPlayer();
|
||||
Pane enderpane = new Pane(Type.SHOW);
|
||||
final Inventory ender = InvSerialization.toInventory(data[3], enderpane,
|
||||
|
||||
@@ -3,34 +3,30 @@ package dev.heliosares.auxprotect.command;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import dev.heliosares.auxprotect.AuxProtect;
|
||||
import dev.heliosares.auxprotect.IAuxProtect;
|
||||
import dev.heliosares.auxprotect.database.DbEntry;
|
||||
import dev.heliosares.auxprotect.database.EntryAction;
|
||||
import dev.heliosares.auxprotect.database.Results;
|
||||
import dev.heliosares.auxprotect.database.SQLManager.LookupException;
|
||||
import dev.heliosares.auxprotect.utils.MoneySolver;
|
||||
import dev.heliosares.auxprotect.utils.MyPermission;
|
||||
import dev.heliosares.auxprotect.utils.MySender;
|
||||
import dev.heliosares.auxprotect.utils.PlayTimeSolver;
|
||||
import dev.heliosares.auxprotect.utils.TimeUtil;
|
||||
import dev.heliosares.auxprotect.utils.XraySolver;
|
||||
|
||||
public class LookupCommand implements CommandExecutor {
|
||||
public class LookupCommand {
|
||||
|
||||
private AuxProtect plugin;
|
||||
private final IAuxProtect plugin;
|
||||
|
||||
private ArrayList<String> validParams;
|
||||
private static final ArrayList<String> validParams;
|
||||
static final HashMap<String, Results> results;
|
||||
|
||||
public LookupCommand(AuxProtect plugin) {
|
||||
this.plugin = plugin;
|
||||
results = new HashMap<>();
|
||||
static {
|
||||
validParams = new ArrayList<>();
|
||||
validParams.add("action");
|
||||
validParams.add("after");
|
||||
@@ -41,246 +37,251 @@ public class LookupCommand implements CommandExecutor {
|
||||
validParams.add("user");
|
||||
validParams.add("radius");
|
||||
validParams.add("db");
|
||||
results = new HashMap<>();
|
||||
}
|
||||
|
||||
HashMap<String, Results> results;
|
||||
public LookupCommand(IAuxProtect plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
public boolean onCommand(org.bukkit.command.CommandSender sender1, String[] args) {
|
||||
MySender sender = new MySender(sender1);
|
||||
onCommand(plugin, sender, args);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void onCommand(IAuxProtect plugin, MySender sender, String[] args) {
|
||||
if (args.length < 2) {
|
||||
sender.sendMessage(plugin.translate("lookup-invalid-syntax"));
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
Player player_ = null;
|
||||
if (sender instanceof Player) {
|
||||
player_ = (Player) sender;
|
||||
}
|
||||
final Player player = player_;
|
||||
if (args.length == 2) {
|
||||
int page = -1;
|
||||
int perpage = -1;
|
||||
boolean isPageLookup = false;
|
||||
boolean next = args[1].equalsIgnoreCase("next");
|
||||
boolean prev = args[1].equalsIgnoreCase("prev");
|
||||
boolean first = args[1].equalsIgnoreCase("first");
|
||||
boolean last = args[1].equalsIgnoreCase("last");
|
||||
if (!next && !prev && !first && !last) {
|
||||
if (args[1].contains(":")) {
|
||||
String[] split = args[1].split(":");
|
||||
try {
|
||||
page = Integer.parseInt(split[0]);
|
||||
perpage = Integer.parseInt(split[1]);
|
||||
isPageLookup = true;
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
page = Integer.parseInt(args[1]);
|
||||
isPageLookup = true;
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isPageLookup || first || last || next || prev) {
|
||||
Results result = null;
|
||||
String uuid = "nonplayer";
|
||||
if (sender instanceof Player) {
|
||||
uuid = ((Player) sender).getUniqueId().toString();
|
||||
}
|
||||
if (results.containsKey(uuid)) {
|
||||
result = results.get(uuid);
|
||||
}
|
||||
if (result == null) {
|
||||
sender.sendMessage(plugin.translate("lookup-no-results-selected"));
|
||||
return true;
|
||||
}
|
||||
if (perpage == -1) {
|
||||
perpage = result.perpage;
|
||||
}
|
||||
if (first) {
|
||||
page = 1;
|
||||
} else if (last) {
|
||||
page = result.getLastPage(result.perpage);
|
||||
} else if (next) {
|
||||
page = result.prevpage + 1;
|
||||
} else if (prev) {
|
||||
page = result.prevpage - 1;
|
||||
}
|
||||
if (perpage > 0) {
|
||||
if (perpage > 100) {
|
||||
perpage = 100;
|
||||
}
|
||||
result.showPage(page, perpage);
|
||||
return true;
|
||||
} else {
|
||||
result.showPage(page);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HashMap<String, String> params = new HashMap<>();
|
||||
boolean count = false;
|
||||
boolean playtime = false;
|
||||
boolean xray = false;
|
||||
boolean bw = false;
|
||||
boolean money = false;
|
||||
long startTime = 0;
|
||||
for (int i = 1; i < args.length; i++) {
|
||||
if (args[i].equalsIgnoreCase("#count")) {
|
||||
count = true;
|
||||
continue;
|
||||
} else if (args[i].equalsIgnoreCase("#xray")) {
|
||||
xray = true;
|
||||
continue;
|
||||
} else if (args[i].equalsIgnoreCase("#bw")) {
|
||||
bw = true;
|
||||
continue;
|
||||
} else if (args[i].equalsIgnoreCase("#pt")) {
|
||||
if (!MyPermission.LOOKUP_PLAYTIME.hasPermission(sender)) {
|
||||
sender.sendMessage(plugin.translate("no-permission-flag"));
|
||||
return true;
|
||||
}
|
||||
playtime = true;
|
||||
continue;
|
||||
} else if (args[i].equalsIgnoreCase("#money")) {
|
||||
if (!MyPermission.LOOKUP_MONEY.hasPermission(sender)) {
|
||||
sender.sendMessage(plugin.translate("no-permission-flag"));
|
||||
return true;
|
||||
}
|
||||
money = true;
|
||||
continue;
|
||||
}
|
||||
String[] split = args[i].split(":");
|
||||
|
||||
String token = split[0];
|
||||
switch (token.toLowerCase()) {
|
||||
case "a":
|
||||
token = "action";
|
||||
break;
|
||||
case "u":
|
||||
token = "user";
|
||||
break;
|
||||
case "t":
|
||||
token = "time";
|
||||
break;
|
||||
case "r":
|
||||
token = "radius";
|
||||
break;
|
||||
case "w":
|
||||
token = "world";
|
||||
break;
|
||||
}
|
||||
if (token.equalsIgnoreCase("db")) {
|
||||
if (!MyPermission.ADMIN.hasPermission(sender)) {
|
||||
sender.sendMessage(plugin.translate("no-permission"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (split.length != 2 || !validParams.contains(token)) {
|
||||
sender.sendMessage(String.format(plugin.translate("lookup-invalid-parameter"), args[i]));
|
||||
return true;
|
||||
}
|
||||
String param = split[1];
|
||||
if (token.equalsIgnoreCase("time") || token.equalsIgnoreCase("before") || token.equalsIgnoreCase("after")) {
|
||||
if (param.endsWith("e")) {
|
||||
long time = -1;
|
||||
try {
|
||||
time = Long.parseLong(param.substring(0, param.length() - 1));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
if (time < 0) {
|
||||
sender.sendMessage(String.format(plugin.translate("lookup-invalid-parameter"), args[i]));
|
||||
return true;
|
||||
}
|
||||
param = time + "";
|
||||
} else {
|
||||
startTime = TimeUtil.convertTime(param);
|
||||
if (startTime < 0) {
|
||||
sender.sendMessage(String.format(plugin.translate("lookup-invalid-parameter"), args[i]));
|
||||
return true;
|
||||
}
|
||||
param = (System.currentTimeMillis() - startTime) + "";
|
||||
}
|
||||
}
|
||||
params.put(token, param.toLowerCase());
|
||||
}
|
||||
if (params.size() < 1) {
|
||||
sender.sendMessage(plugin.translate("purge-error-notenough"));
|
||||
return true;
|
||||
}
|
||||
if (bw) {
|
||||
String user = params.get("user");
|
||||
final String targetOld = params.get("target");
|
||||
String target = params.get("target");
|
||||
if (user == null) {
|
||||
user = "";
|
||||
}
|
||||
if (target == null) {
|
||||
target = "";
|
||||
}
|
||||
if (user.length() > 0) {
|
||||
if (targetOld != null && targetOld.length() > 0) {
|
||||
target += ",";
|
||||
}
|
||||
target += user;
|
||||
}
|
||||
if (targetOld != null && targetOld.length() > 0) {
|
||||
if (user.length() > 0) {
|
||||
user += ",";
|
||||
}
|
||||
user += targetOld;
|
||||
}
|
||||
if (user.length() > 0) {
|
||||
params.put("user", user);
|
||||
}
|
||||
if (target.length() > 0) {
|
||||
params.put("target", target);
|
||||
}
|
||||
}
|
||||
if (playtime) {
|
||||
if (params.containsKey("user")) {
|
||||
if (params.get("user").split(",").length > 1) {
|
||||
sender.sendMessage(plugin.translate("lookup-playtime-toomanyusers"));
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
sender.sendMessage(plugin.translate("lookup-playtime-nouser"));
|
||||
return true;
|
||||
}
|
||||
if (params.containsKey("action")) {
|
||||
params.remove("action");
|
||||
params.put("action", "session");
|
||||
}
|
||||
}
|
||||
final boolean count_ = count;
|
||||
final boolean playtime_ = playtime;
|
||||
final boolean xray_ = xray;
|
||||
final long startTime_ = startTime;
|
||||
final boolean money_ = money;
|
||||
sender.sendMessage(plugin.translate("lookup-looking"));
|
||||
BukkitRunnable runnable = new BukkitRunnable() {
|
||||
Runnable run = new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
ArrayList<DbEntry> results = null;
|
||||
if (args.length == 2) {
|
||||
int page = -1;
|
||||
int perpage = -1;
|
||||
boolean isPageLookup = false;
|
||||
boolean next = args[1].equalsIgnoreCase("next");
|
||||
boolean prev = args[1].equalsIgnoreCase("prev");
|
||||
boolean first = args[1].equalsIgnoreCase("first");
|
||||
boolean last = args[1].equalsIgnoreCase("last");
|
||||
if (!next && !prev && !first && !last) {
|
||||
if (args[1].contains(":")) {
|
||||
String[] split = args[1].split(":");
|
||||
try {
|
||||
page = Integer.parseInt(split[0]);
|
||||
perpage = Integer.parseInt(split[1]);
|
||||
isPageLookup = true;
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
page = Integer.parseInt(args[1]);
|
||||
isPageLookup = true;
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isPageLookup || first || last || next || prev) {
|
||||
Results result = null;
|
||||
String uuid = sender.getUniqueId().toString();
|
||||
if (results.containsKey(uuid)) {
|
||||
result = results.get(uuid);
|
||||
}
|
||||
if (result == null) {
|
||||
sender.sendMessage(plugin.translate("lookup-no-results-selected"));
|
||||
return;
|
||||
}
|
||||
if (perpage == -1) {
|
||||
perpage = result.perpage;
|
||||
}
|
||||
if (first) {
|
||||
page = 1;
|
||||
} else if (last) {
|
||||
page = result.getLastPage(result.perpage);
|
||||
} else if (next) {
|
||||
page = result.prevpage + 1;
|
||||
} else if (prev) {
|
||||
page = result.prevpage - 1;
|
||||
}
|
||||
if (perpage > 0) {
|
||||
if (perpage > 100) {
|
||||
perpage = 100;
|
||||
}
|
||||
result.showPage(page, perpage);
|
||||
return;
|
||||
} else {
|
||||
result.showPage(page);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HashMap<String, String> params = new HashMap<>();
|
||||
boolean count = false;
|
||||
boolean playtime = false;
|
||||
boolean xray = false;
|
||||
boolean bw = false;
|
||||
boolean money = false;
|
||||
long startTime = 0;
|
||||
for (int i = 1; i < args.length; i++) {
|
||||
if (args[i].equalsIgnoreCase("#count")) {
|
||||
count = true;
|
||||
continue;
|
||||
} else if (args[i].equalsIgnoreCase("#xray")) {
|
||||
xray = true;
|
||||
continue;
|
||||
} else if (args[i].equalsIgnoreCase("#bw")) {
|
||||
bw = true;
|
||||
continue;
|
||||
} else if (args[i].equalsIgnoreCase("#pt")) {
|
||||
if (!MyPermission.LOOKUP_PLAYTIME.hasPermission(sender)) {
|
||||
sender.sendMessage(plugin.translate("no-permission-flag"));
|
||||
return;
|
||||
}
|
||||
playtime = true;
|
||||
continue;
|
||||
} else if (args[i].equalsIgnoreCase("#money")) {
|
||||
if (!MyPermission.LOOKUP_MONEY.hasPermission(sender)) {
|
||||
sender.sendMessage(plugin.translate("no-permission-flag"));
|
||||
return;
|
||||
}
|
||||
money = true;
|
||||
continue;
|
||||
}
|
||||
String[] split = args[i].split(":");
|
||||
|
||||
String token = split[0];
|
||||
switch (token.toLowerCase()) {
|
||||
case "a":
|
||||
token = "action";
|
||||
break;
|
||||
case "u":
|
||||
token = "user";
|
||||
break;
|
||||
case "t":
|
||||
token = "time";
|
||||
break;
|
||||
case "r":
|
||||
token = "radius";
|
||||
break;
|
||||
case "w":
|
||||
token = "world";
|
||||
break;
|
||||
}
|
||||
if (token.equalsIgnoreCase("db")) {
|
||||
if (!MyPermission.ADMIN.hasPermission(sender)) {
|
||||
sender.sendMessage(plugin.translate("no-permission"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (split.length != 2 || !validParams.contains(token)) {
|
||||
sender.sendMessage(String.format(plugin.translate("lookup-invalid-parameter"), args[i]));
|
||||
return;
|
||||
}
|
||||
String param = split[1];
|
||||
if (token.equalsIgnoreCase("time") || token.equalsIgnoreCase("before")
|
||||
|| token.equalsIgnoreCase("after")) {
|
||||
if (param.endsWith("e")) {
|
||||
long time = -1;
|
||||
try {
|
||||
time = Long.parseLong(param.substring(0, param.length() - 1));
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
if (time < 0) {
|
||||
sender.sendMessage(
|
||||
String.format(plugin.translate("lookup-invalid-parameter"), args[i]));
|
||||
return;
|
||||
}
|
||||
param = time + "";
|
||||
} else {
|
||||
startTime = TimeUtil.convertTime(param);
|
||||
if (startTime < 0) {
|
||||
sender.sendMessage(
|
||||
String.format(plugin.translate("lookup-invalid-parameter"), args[i]));
|
||||
return;
|
||||
}
|
||||
param = (System.currentTimeMillis() - startTime) + "";
|
||||
}
|
||||
}
|
||||
params.put(token, param.toLowerCase());
|
||||
}
|
||||
if (params.size() < 1) {
|
||||
sender.sendMessage(plugin.translate("purge-error-notenough"));
|
||||
return;
|
||||
}
|
||||
if (bw) {
|
||||
String user = params.get("user");
|
||||
final String targetOld = params.get("target");
|
||||
String target = params.get("target");
|
||||
if (user == null) {
|
||||
user = "";
|
||||
}
|
||||
if (target == null) {
|
||||
target = "";
|
||||
}
|
||||
if (user.length() > 0) {
|
||||
if (targetOld != null && targetOld.length() > 0) {
|
||||
target += ",";
|
||||
}
|
||||
target += user;
|
||||
}
|
||||
if (targetOld != null && targetOld.length() > 0) {
|
||||
if (user.length() > 0) {
|
||||
user += ",";
|
||||
}
|
||||
user += targetOld;
|
||||
}
|
||||
if (user.length() > 0) {
|
||||
params.put("user", user);
|
||||
}
|
||||
if (target.length() > 0) {
|
||||
params.put("target", target);
|
||||
}
|
||||
}
|
||||
if (playtime) {
|
||||
if (params.containsKey("user")) {
|
||||
if (params.get("user").split(",").length > 1) {
|
||||
sender.sendMessage(plugin.translate("lookup-playtime-toomanyusers"));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
sender.sendMessage(plugin.translate("lookup-playtime-nouser"));
|
||||
return;
|
||||
}
|
||||
if (params.containsKey("action")) {
|
||||
params.remove("action");
|
||||
params.put("action", "session");
|
||||
}
|
||||
}
|
||||
sender.sendMessage(plugin.translate("lookup-looking"));
|
||||
ArrayList<DbEntry> rs = null;
|
||||
try {
|
||||
results = plugin.getSqlManager().lookup(params, player != null ? player.getLocation() : null,
|
||||
false);
|
||||
if (sender.isBungee()) {
|
||||
rs = plugin.getSqlManager().lookup(params, null, false);
|
||||
} else {
|
||||
Location location = null;
|
||||
if (sender.getSender() instanceof Player) {
|
||||
location = ((Player) sender.getSender()).getLocation();
|
||||
}
|
||||
rs = plugin.getSqlManager().lookup(params, location, false);
|
||||
}
|
||||
} catch (LookupException e) {
|
||||
sender.sendMessage(e.errorMessage);
|
||||
return;
|
||||
}
|
||||
if (results == null || results.size() == 0) {
|
||||
if (rs == null || rs.size() == 0) {
|
||||
sender.sendMessage(plugin.translate("lookup-noresults"));
|
||||
return;
|
||||
}
|
||||
if (count_) {
|
||||
sender.sendMessage(String.format(plugin.translate("lookup-count"), results.size()));
|
||||
if (count) {
|
||||
sender.sendMessage(String.format(plugin.translate("lookup-count"), rs.size()));
|
||||
double totalMoney = 0;
|
||||
int dropcount = 0;
|
||||
int pickupcount = 0;
|
||||
for (DbEntry entry : results) {
|
||||
for (DbEntry entry : rs) {
|
||||
if (entry.getAction() == EntryAction.SHOP) {
|
||||
String[] parts = entry.getData().split(", ");
|
||||
if (parts.length >= 3) {
|
||||
@@ -294,9 +295,6 @@ public class LookupCommand implements CommandExecutor {
|
||||
totalMoney += each * qty;
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
if (plugin.debug >= 3) {
|
||||
ignored.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -306,9 +304,6 @@ public class LookupCommand implements CommandExecutor {
|
||||
double each = Double.parseDouble(parts[parts.length - 1].substring(1));
|
||||
totalMoney += each;
|
||||
} catch (Exception ignored) {
|
||||
if (plugin.debug >= 3) {
|
||||
ignored.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (entry.getAction() == EntryAction.DROP || entry.getAction() == EntryAction.PICKUP) {
|
||||
@@ -327,8 +322,8 @@ public class LookupCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (totalMoney != 0) {
|
||||
sender.sendMessage("§9" + plugin.formatMoney(totalMoney));
|
||||
if (totalMoney != 0 && plugin instanceof AuxProtect) {
|
||||
sender.sendMessage("§9" + ((AuxProtect) plugin).formatMoney(totalMoney));
|
||||
}
|
||||
String msg = "";
|
||||
if (pickupcount > 0) {
|
||||
@@ -343,7 +338,7 @@ public class LookupCommand implements CommandExecutor {
|
||||
if (msg.length() > 0) {
|
||||
sender.sendMessage(msg);
|
||||
}
|
||||
} else if (playtime_) {
|
||||
} else if (playtime) {
|
||||
String users = params.get("user");
|
||||
if (users == null) {
|
||||
sender.sendMessage(plugin.translate("playtime-nouser"));
|
||||
@@ -353,11 +348,11 @@ public class LookupCommand implements CommandExecutor {
|
||||
sender.sendMessage(plugin.translate("playtime-toomanyusers"));
|
||||
return;
|
||||
}
|
||||
sender.spigot().sendMessage(
|
||||
PlayTimeSolver.solvePlaytime(results, (int) Math.round(startTime_ / (1000 * 3600)), users));
|
||||
} else if (xray_) {
|
||||
sender.spigot().sendMessage(XraySolver.solvePlaytime(results, plugin));
|
||||
} else if (money_) {
|
||||
sender.sendMessage(
|
||||
PlayTimeSolver.solvePlaytime(rs, (int) Math.round(startTime / (1000 * 3600)), users));
|
||||
} else if (xray) {
|
||||
sender.sendMessage(XraySolver.solvePlaytime(rs, plugin));
|
||||
} else if (money && !sender.isBungee()) {
|
||||
String users = params.get("user");
|
||||
if (users == null) {
|
||||
sender.sendMessage(plugin.translate("playtime-nouser"));
|
||||
@@ -367,27 +362,21 @@ public class LookupCommand implements CommandExecutor {
|
||||
sender.sendMessage(plugin.translate("playtime-toomanyusers"));
|
||||
return;
|
||||
}
|
||||
@SuppressWarnings("deprecation")
|
||||
OfflinePlayer targetUser = Bukkit.getOfflinePlayer(users);
|
||||
if (targetUser == null) {
|
||||
sender.sendMessage(plugin.translate("playtime-nouser"));
|
||||
if (sender.getSender() instanceof Player) {
|
||||
MoneySolver.showMoney(plugin, (Player) sender.getSender(), rs,
|
||||
(int) Math.round(startTime / (1000 * 3600)), users);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
MoneySolver.showMoney(plugin, player, results, (int) Math.round(startTime_ / (1000 * 3600)),
|
||||
targetUser.getName());
|
||||
} else {
|
||||
String uuid = "nonplayer";
|
||||
if (player != null) {
|
||||
uuid = player.getUniqueId().toString();
|
||||
}
|
||||
Results result = new Results(plugin, results, sender);
|
||||
String uuid = sender.getUniqueId().toString();
|
||||
Results result = new Results(plugin, rs, sender, sender.isBungee() ? "apb" : "ap");
|
||||
result.showPage(1, 4);
|
||||
LookupCommand.this.results.put(uuid, result);
|
||||
results.put(uuid, result);
|
||||
}
|
||||
}
|
||||
};
|
||||
runnable.runTaskAsynchronously(plugin);
|
||||
return true;
|
||||
plugin.runAsync(run);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,47 +1,14 @@
|
||||
package dev.heliosares.auxprotect.command;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import dev.heliosares.auxprotect.AuxProtect;
|
||||
import dev.heliosares.auxprotect.database.Results;
|
||||
import dev.heliosares.auxprotect.IAuxProtect;
|
||||
import dev.heliosares.auxprotect.database.SQLManager.TABLE;
|
||||
import dev.heliosares.auxprotect.utils.MySender;
|
||||
import dev.heliosares.auxprotect.utils.TimeUtil;
|
||||
|
||||
public class PurgeCommand implements CommandExecutor {
|
||||
public class PurgeCommand {
|
||||
|
||||
private AuxProtect plugin;
|
||||
|
||||
private ArrayList<String> validParams;
|
||||
|
||||
public PurgeCommand(AuxProtect plugin) {
|
||||
this.plugin = plugin;
|
||||
results = new HashMap<>();
|
||||
validParams = new ArrayList<>();
|
||||
validParams.add("time");
|
||||
validParams.add("world");
|
||||
validParams.add("action");
|
||||
}
|
||||
|
||||
HashMap<String, Results> results;
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
purge(sender, args);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
public void purge(CommandSender sender, String[] args) {
|
||||
public static void purge(IAuxProtect plugin, MySender sender, String[] args) {
|
||||
if (args.length != 3) {
|
||||
sender.sendMessage(plugin.translate("lookup-invalid-syntax"));
|
||||
return;
|
||||
@@ -51,7 +18,11 @@ public class PurgeCommand implements CommandExecutor {
|
||||
try {
|
||||
table = TABLE.valueOf(args[1].toUpperCase());
|
||||
} catch (IllegalArgumentException e) {
|
||||
sender.sendMessage(plugin.translate("lookup-invalid-syntax"));
|
||||
sender.sendMessage(plugin.translate("purge-table"));
|
||||
return;
|
||||
}
|
||||
if (sender.isBungee() && !table.isOnBungee()) {
|
||||
sender.sendMessage(plugin.translate("purge-table"));
|
||||
return;
|
||||
}
|
||||
long time = TimeUtil.convertTime(args[2]);
|
||||
@@ -61,12 +32,12 @@ public class PurgeCommand implements CommandExecutor {
|
||||
return;
|
||||
}
|
||||
|
||||
sender.sendMessage(plugin.translate("purge-purging"));
|
||||
sender.sendMessage(String.format(plugin.translate("purge-purging"), table.toString()));
|
||||
boolean success = false;
|
||||
try {
|
||||
success = plugin.getSqlManager().purge(sender, table, time);
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
plugin.print(e);
|
||||
}
|
||||
if (success) {
|
||||
sender.sendMessage(plugin.translate("purge-complete"));
|
||||
|
||||
@@ -26,6 +26,7 @@ import dev.heliosares.auxprotect.database.SQLManager.LookupException;
|
||||
import dev.heliosares.auxprotect.database.SQLManager.TABLE;
|
||||
import dev.heliosares.auxprotect.utils.EntryFormatter;
|
||||
import dev.heliosares.auxprotect.utils.MyPermission;
|
||||
import dev.heliosares.auxprotect.utils.MySender;
|
||||
import dev.heliosares.auxprotect.utils.TimeUtil;
|
||||
import net.coreprotect.CoreProtect;
|
||||
import net.coreprotect.CoreProtectAPI.ParseResult;
|
||||
@@ -189,8 +190,8 @@ public class XrayCommand implements CommandExecutor {
|
||||
sender.sendMessage(plugin.translate("xray-rate-conflic"));
|
||||
boolean validWarning = false;
|
||||
for (DbEntry warn : localHits) {
|
||||
if (warn.userUuid.equals(en.userUuid)) {
|
||||
EntryFormatter.sendEntry(plugin, warn, sender);
|
||||
if (warn.getUserUUID().equals(en.getUserUUID())) {
|
||||
EntryFormatter.sendEntry(plugin, warn, new MySender(sender));
|
||||
validWarning = true;
|
||||
}
|
||||
}
|
||||
@@ -227,8 +228,7 @@ public class XrayCommand implements CommandExecutor {
|
||||
}
|
||||
}
|
||||
plugin.dbRunnable.add(new DbEntry(en.getTime(),
|
||||
"$" + Bukkit.getOfflinePlayer(en.getUser(plugin.getSqlManager())).getUniqueId()
|
||||
.toString(),
|
||||
"$" + Bukkit.getOfflinePlayer(en.getUser()).getUniqueId().toString(),
|
||||
EntryAction.XRAYCHECK, false, en.world, en.x, en.y, en.z, rating_ + "",
|
||||
"Rated by " + sender.getName() + " on "
|
||||
+ LocalDateTime.now().format(EntryFormatter.formatter)));
|
||||
@@ -312,7 +312,7 @@ public class XrayCommand implements CommandExecutor {
|
||||
true);// boolean lookup
|
||||
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
plugin.print(e);
|
||||
sender.sendMessage("§cAn error occured.");
|
||||
return;
|
||||
}
|
||||
@@ -372,8 +372,7 @@ public class XrayCommand implements CommandExecutor {
|
||||
if (player != null) {
|
||||
uuid = player.getUniqueId().toString();
|
||||
}
|
||||
entries.sort((o1, o2) -> o1.getUser(plugin.getSqlManager())
|
||||
.compareTo(o2.getUser(plugin.getSqlManager())));
|
||||
entries.sort((o1, o2) -> o1.getUser().compareTo(o2.getUser()));
|
||||
entries.sort((o1, o2) -> o1.getLocation().getWorld().getName()
|
||||
.compareTo(o2.getLocation().getWorld().getName()));
|
||||
XrayResults result = new XrayResults(plugin, entries, sender);
|
||||
|
||||
@@ -84,12 +84,13 @@ public class DatabaseRunnable implements Runnable {
|
||||
ArrayList<DbEntry> entriesLongterm = new ArrayList<>();
|
||||
ArrayList<DbEntry> entriesAbandoned = new ArrayList<>();
|
||||
ArrayList<DbEntry> entriesInventory = new ArrayList<>();
|
||||
ArrayList<DbEntry> entriesCommands = new ArrayList<>();
|
||||
ArrayList<DbEntry> entriesSpam = new ArrayList<>();
|
||||
|
||||
lastPolled = System.currentTimeMillis();
|
||||
while ((entry = queue.poll()) != null) {
|
||||
if (plugin.getDebug() >= 2) {
|
||||
String debug = String.format("§9%s §f%s§7(%d) §9%s §7", entry.getUser(sqlManager),
|
||||
String debug = String.format("§9%s §f%s§7(%d) §9%s §7", entry.getUser(),
|
||||
plugin.translate(entry.getAction().getLang(entry.getState())),
|
||||
entry.getAction().getId(entry.getState()), entry.getTarget());
|
||||
if (entry.getData() != null && entry.getData().length() > 0) {
|
||||
@@ -103,7 +104,7 @@ public class DatabaseRunnable implements Runnable {
|
||||
plugin.debug(debug, 2);
|
||||
}
|
||||
|
||||
switch (entry.getAction().getTable(plugin.isBungee())) {
|
||||
switch (entry.getAction().getTable()) {
|
||||
case AUXPROTECT_ABANDONED:
|
||||
entriesAbandoned.add(entry);
|
||||
break;
|
||||
@@ -116,11 +117,14 @@ public class DatabaseRunnable implements Runnable {
|
||||
case AUXPROTECT_LONGTERM:
|
||||
entriesLongterm.add(entry);
|
||||
break;
|
||||
case AUXPROTECT_COMMANDS:
|
||||
entriesCommands.add(entry);
|
||||
break;
|
||||
case AUXPROTECT:
|
||||
entries.add(entry);
|
||||
break;
|
||||
default:
|
||||
plugin.warning("Unknown table " + entry.getAction().getTable(plugin.isBungee()).toString()
|
||||
plugin.warning("Unknown table " + entry.getAction().getTable().toString()
|
||||
+ ". This is bad. (DatabaseRunnable)");
|
||||
continue;
|
||||
}
|
||||
@@ -152,13 +156,19 @@ public class DatabaseRunnable implements Runnable {
|
||||
plugin.debug(debugLogStatement(start, entriesLongterm.size(), TABLE.AUXPROTECT_LONGTERM), 1);
|
||||
start = System.nanoTime();
|
||||
}
|
||||
if (entriesCommands.size() > 0) {
|
||||
sqlManager.put(TABLE.AUXPROTECT_COMMANDS, entriesCommands);
|
||||
plugin.debug(debugLogStatement(start, entriesCommands.size(), TABLE.AUXPROTECT_COMMANDS), 1);
|
||||
start = System.nanoTime();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
plugin.print(e);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
plugin.print(e);
|
||||
}
|
||||
sqlManager.cleanup();
|
||||
|
||||
running = 0;
|
||||
}
|
||||
@@ -199,8 +209,8 @@ public class DatabaseRunnable implements Runnable {
|
||||
if (next.getAction() != entry.getAction()) {
|
||||
continue;
|
||||
}
|
||||
if (next.userUuid.equals(entry.userUuid)) {
|
||||
if (next.targetUuid.equals(entry.targetUuid)) {
|
||||
if (next.getUserUUID().equals(entry.getUserUUID())) {
|
||||
if (next.getTargetUUID().equals(entry.getTargetUUID())) {
|
||||
if (next.world.equals(entry.world)) {
|
||||
if (next.getDistance(entry) <= 3) {
|
||||
next.add(entry);
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package dev.heliosares.auxprotect.database;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
|
||||
@@ -34,10 +32,13 @@ public class DbEntry {
|
||||
public final int y;
|
||||
public final int z;
|
||||
|
||||
public final String userUuid;
|
||||
private String userUuid;
|
||||
private String user;
|
||||
public final String targetUuid;
|
||||
private int uid;
|
||||
|
||||
private String targetUuid;
|
||||
private String target;
|
||||
private int target_id;
|
||||
|
||||
public DbEntry(String userUuid, EntryAction action, boolean state, String world, int x, int y, int z, String target,
|
||||
String data) {
|
||||
@@ -53,6 +54,19 @@ public class DbEntry {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public DbEntry(String userUuid, EntryAction action, boolean state, String target, String data) {
|
||||
this.time = DatabaseRunnable.getTime();
|
||||
this.userUuid = userUuid;
|
||||
this.action = action;
|
||||
this.state = state;
|
||||
this.world = null;
|
||||
this.x = 0;
|
||||
this.y = 0;
|
||||
this.z = 0;
|
||||
this.targetUuid = target;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public DbEntry(String userUuid, EntryAction action, boolean state, Location location, String target,
|
||||
String suplmemental) {
|
||||
this(userUuid, action, state, location.getWorld().getName(), location.getBlockX(), location.getBlockY(),
|
||||
@@ -73,35 +87,109 @@ public class DbEntry {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public String getUser(SQLManager sqlManager) {
|
||||
public DbEntry(long time, int uid, EntryAction action, boolean state, String world, int x, int y, int z,
|
||||
String target, String data) {
|
||||
this.time = time;
|
||||
this.uid = uid;
|
||||
this.action = action;
|
||||
this.state = state;
|
||||
this.world = world;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.targetUuid = target;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public DbEntry(long time, int uid, EntryAction action, boolean state, String world, int x, int y, int z,
|
||||
int target_id, String data) {
|
||||
this.time = time;
|
||||
this.uid = uid;
|
||||
this.action = action;
|
||||
this.state = state;
|
||||
this.world = world;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.target_id = target_id;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public String getUser() {
|
||||
if (user != null) {
|
||||
return user;
|
||||
}
|
||||
if (!userUuid.startsWith("$") || userUuid.length() != 37) {
|
||||
return user = userUuid;
|
||||
if (!getUserUUID().startsWith("$") || getUserUUID().length() != 37) {
|
||||
return user = getUserUUID();
|
||||
}
|
||||
user = sqlManager.getUsernameFromUUID(userUuid);
|
||||
user = SQLManager.getInstance().getUsernameFromUID(getUid());
|
||||
if (user == null) {
|
||||
user = userUuid;
|
||||
user = getUserUUID();
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
public int getUid() {
|
||||
if (uid > 0) {
|
||||
return uid;
|
||||
}
|
||||
return uid = SQLManager.getInstance().getUIDFromUUID(getUserUUID(), true);
|
||||
}
|
||||
|
||||
public int getTargetId() {
|
||||
if (action.getTable().hasStringTarget()) {
|
||||
return -1;
|
||||
}
|
||||
if (target_id > 0) {
|
||||
return target_id;
|
||||
}
|
||||
return target_id = SQLManager.getInstance().getUIDFromUUID(getTargetUUID(), true);
|
||||
}
|
||||
|
||||
public String getTarget() {
|
||||
if (target != null) {
|
||||
return target;
|
||||
}
|
||||
if (!targetUuid.startsWith("$") || targetUuid.length() != 37) {
|
||||
return target = targetUuid;
|
||||
if (action.getTable().hasStringTarget() || !getTargetUUID().startsWith("$") || getTargetUUID().length() != 37) {
|
||||
return target = getTargetUUID();
|
||||
}
|
||||
try {
|
||||
target = Bukkit.getServer().getOfflinePlayer(UUID.fromString(targetUuid.substring(1))).getName();
|
||||
} catch (NoClassDefFoundError e) {
|
||||
target = targetUuid;
|
||||
target = SQLManager.getInstance().getUsernameFromUID(getTargetId());
|
||||
if (target == null) {
|
||||
target = getTargetUUID();
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
public String getTargetUUID() {
|
||||
if (targetUuid != null) {
|
||||
return targetUuid;
|
||||
}
|
||||
if (target_id > 0) {
|
||||
targetUuid = SQLManager.getInstance().getUUIDFromUID(target_id);
|
||||
} else if (target_id == 0) {
|
||||
return targetUuid = "";
|
||||
}
|
||||
if (targetUuid == null) {
|
||||
targetUuid = "#null";
|
||||
}
|
||||
return targetUuid;
|
||||
}
|
||||
|
||||
public String getUserUUID() {
|
||||
if (userUuid != null) {
|
||||
return userUuid;
|
||||
}
|
||||
if (uid > 0) {
|
||||
userUuid = SQLManager.getInstance().getUUIDFromUID(uid);
|
||||
} else if (uid == 0) {
|
||||
return userUuid = "";
|
||||
}
|
||||
if (userUuid == null) {
|
||||
userUuid = "#null";
|
||||
}
|
||||
return userUuid;
|
||||
}
|
||||
|
||||
public double getBoxDistance(DbEntry entry) {
|
||||
if (!entry.world.equals(world)) {
|
||||
return -1;
|
||||
|
||||
@@ -17,7 +17,7 @@ public enum EntryAction {
|
||||
// END DEFAULT (255)
|
||||
|
||||
// START SPAM(256)
|
||||
POS(256), HURT(257), INV(258, 259), COMMAND(260), KILL(261), LAND(262), ELYTRA(263, 264),
|
||||
POS(256), HURT(257), INV(258, 259), KILL(261), LAND(262), ELYTRA(263, 264),
|
||||
// END SPAM(511)
|
||||
|
||||
// START IGNOREABANDONED(512)
|
||||
@@ -31,8 +31,12 @@ public enum EntryAction {
|
||||
// START INVENTORY (1024)
|
||||
INVENTORY(1024), LAUNCH(1025), GRAB(1026), DROP(1027), PICKUP(1028), AHLIST(1029), AHBUY(1030),
|
||||
// inventory doubles
|
||||
ITEMFRAME(1152, 1153)
|
||||
// END INVENTORY(1280)
|
||||
ITEMFRAME(1152, 1153),
|
||||
// END INVENTORY(1279)
|
||||
|
||||
// START COMMANDS (1280)
|
||||
COMMAND(1280)
|
||||
// END COMMANDS(1289)
|
||||
;
|
||||
|
||||
public final boolean hasDual;
|
||||
@@ -75,8 +79,10 @@ public enum EntryAction {
|
||||
public boolean isBungee() {
|
||||
switch (this) {
|
||||
case MSG:
|
||||
return true;
|
||||
case COMMAND:
|
||||
case IP:
|
||||
case USERNAME:
|
||||
case SESSION:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@@ -94,13 +100,13 @@ public enum EntryAction {
|
||||
return true;
|
||||
}
|
||||
|
||||
public TABLE getTable(boolean bungee) {
|
||||
if (bungee) {
|
||||
public TABLE getTable() {
|
||||
/*if (bungee) {
|
||||
if (this == USERNAME || this == IP) {
|
||||
return TABLE.AUXPROTECT_LONGTERM;
|
||||
}
|
||||
return TABLE.AUXPROTECT;
|
||||
}
|
||||
}*/
|
||||
if (id < 256) {
|
||||
return TABLE.AUXPROTECT;
|
||||
}
|
||||
@@ -116,6 +122,9 @@ public enum EntryAction {
|
||||
if (id < 1280) {
|
||||
return TABLE.AUXPROTECT_INVENTORY;
|
||||
}
|
||||
if (id < 1290) {
|
||||
return TABLE.AUXPROTECT_COMMANDS;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,12 +5,11 @@ import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import dev.heliosares.auxprotect.AuxProtect;
|
||||
import dev.heliosares.auxprotect.IAuxProtect;
|
||||
import dev.heliosares.auxprotect.utils.InvSerialization;
|
||||
import dev.heliosares.auxprotect.utils.MyPermission;
|
||||
import dev.heliosares.auxprotect.utils.MySender;
|
||||
import dev.heliosares.auxprotect.utils.TimeUtil;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
@@ -20,17 +19,37 @@ import net.md_5.bungee.api.chat.hover.content.Text;
|
||||
public class Results {
|
||||
|
||||
protected final ArrayList<DbEntry> entries;
|
||||
protected final CommandSender player;
|
||||
protected final MySender player;
|
||||
protected final DateTimeFormatter formatter;
|
||||
private final IAuxProtect plugin;
|
||||
public int perpage = 4;
|
||||
public int prevpage = 0;
|
||||
final String commandPrefix;
|
||||
|
||||
public Results(IAuxProtect plugin, ArrayList<DbEntry> entries, CommandSender player) {
|
||||
public Results(IAuxProtect plugin, ArrayList<DbEntry> entries, MySender player, String commandPrefix) {
|
||||
this.entries = entries;
|
||||
this.player = player;
|
||||
this.formatter = DateTimeFormatter.ofPattern("ddMMMYY HH:mm:ss.SSS");
|
||||
this.plugin = plugin;
|
||||
if (!commandPrefix.startsWith("/")) {
|
||||
commandPrefix = "/" + commandPrefix;
|
||||
}
|
||||
this.commandPrefix = commandPrefix;
|
||||
|
||||
boolean allNullWorld = true;
|
||||
int count = 0;
|
||||
for (DbEntry entry : entries) {
|
||||
if (entry.world != null && !entry.world.equals("#null")) {
|
||||
allNullWorld = false;
|
||||
break;
|
||||
}
|
||||
if (count++ > 1000) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (allNullWorld) {
|
||||
perpage = 10;
|
||||
}
|
||||
}
|
||||
|
||||
public DbEntry get(int i) {
|
||||
@@ -53,37 +72,39 @@ public class Results {
|
||||
for (int i = (page - 1) * perpage; i < (page) * perpage && i < entries.size(); i++) {
|
||||
DbEntry en = entries.get(i);
|
||||
ComponentBuilder message = new ComponentBuilder();
|
||||
plugin.debug(en.getTarget() + "(" + en.getTargetId() + "): " + en.getTargetUUID());
|
||||
|
||||
message.append(String.format("§7%s ago", TimeUtil.millisToString(System.currentTimeMillis() - en.getTime()),
|
||||
en.getUser(plugin.getSqlManager())))
|
||||
en.getUser()))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||
new Text(Instant.ofEpochMilli(en.getTime()).atZone(ZoneId.systemDefault()).format(formatter)
|
||||
+ "\n§7Click to copy epoch time.")))
|
||||
.event(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, en.getTime() + "e"));
|
||||
|
||||
message.append(String.format(" §f- §9%s §f%s §9%s§f", en.getUser(plugin.getSqlManager()),
|
||||
message.append(String.format(" §f- §9%s §f%s §9%s§f", en.getUser(),
|
||||
plugin.translate(en.getAction().getLang(en.getState())), en.getTarget())).event((HoverEvent) null);
|
||||
String data = en.getData();
|
||||
if (data != null && data.contains(InvSerialization.itemSeparator)) {
|
||||
data = data.split(InvSerialization.itemSeparator)[0];
|
||||
if (MyPermission.INV.hasPermission(player)) {
|
||||
message.append(" §a[View]")
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/ap inv %d", i)))
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
String.format(commandPrefix + " inv %d", i)))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to view!")));
|
||||
}
|
||||
}
|
||||
if (en.getAction() == EntryAction.INVENTORY) {
|
||||
if (MyPermission.INV.hasPermission(player)) {
|
||||
message.append(" §a[View]")
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/ap inv %d", i)))
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
String.format(commandPrefix + " inv %d", i)))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to view!")));
|
||||
}
|
||||
} else if (en.getAction() == EntryAction.KILL) {
|
||||
if (MyPermission.INV.hasPermission(player) && !en.getTarget().startsWith("#")) {
|
||||
message.append(" §a[View Inv]")
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
String.format("/ap l u:%s a:inventory target:death before:%de after:%de",
|
||||
en.getTarget(), en.getTime() + 50L, en.getTime() - 50L)))
|
||||
message.append(" §a[View Inv]").event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
String.format(commandPrefix + " l u:%s a:inventory target:death before:%de after:%de",
|
||||
en.getTarget(), en.getTime() + 50L, en.getTime() - 50L)))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to view!")));
|
||||
}
|
||||
message.append(" §7(" + data + ")");
|
||||
@@ -91,23 +112,24 @@ public class Results {
|
||||
message.append(" §7(" + data + ")");
|
||||
}
|
||||
if (en.world != null && !en.world.equals("$null")) {
|
||||
String tpCommand = String.format(commandPrefix + " tp %d %d %d %s", en.x, en.y, en.z, en.world);
|
||||
message.append(String.format("\n §7§l^ §7(x%d/y%d/z%d/%s)", en.x, en.y, en.z, en.world))
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
String.format("/ap tp %d %d %d %s", en.x, en.y, en.z, en.world)))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to Teleport!")));
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, tpCommand))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§7" + tpCommand)));
|
||||
}
|
||||
player.spigot().sendMessage(message.create());
|
||||
player.sendMessage(message.create());
|
||||
}
|
||||
|
||||
ComponentBuilder message = new ComponentBuilder();
|
||||
message.append("§7(");
|
||||
if (page > 1) {
|
||||
message.append("§9§l" + AuxProtect.LEFT_ARROW + AuxProtect.LEFT_ARROW)
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ap l 1:" + perpage))
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, commandPrefix + " l 1:" + perpage))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§9Jump to First Page")));
|
||||
message.append(" ").event((ClickEvent) null).event((HoverEvent) null);
|
||||
message.append("§9§l" + AuxProtect.LEFT_ARROW)
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ap l " + (page - 1) + ":" + perpage))
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
commandPrefix + " l " + (page - 1) + ":" + perpage))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Last Page")));
|
||||
} else {
|
||||
message.event(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, ""));
|
||||
@@ -119,11 +141,13 @@ public class Results {
|
||||
message.append(" ").event((ClickEvent) null).event((HoverEvent) null);
|
||||
if (page < lastpage) {
|
||||
message.append("§9§l" + AuxProtect.RIGHT_ARROW)
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ap l " + (page + 1) + ":" + perpage))
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
commandPrefix + " l " + (page + 1) + ":" + perpage))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Next Page")));
|
||||
message.append(" ").event((ClickEvent) null).event((HoverEvent) null);
|
||||
message.append("§9§l" + AuxProtect.RIGHT_ARROW + AuxProtect.RIGHT_ARROW)
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ap l " + lastpage + ":" + perpage))
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
commandPrefix + " l " + lastpage + ":" + perpage))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Jump to Last Page")));
|
||||
} else {
|
||||
message.append("§8§l" + AuxProtect.RIGHT_ARROW).event((ClickEvent) null).event((HoverEvent) null);
|
||||
@@ -133,7 +157,7 @@ public class Results {
|
||||
message.append("§7) ").event((ClickEvent) null).event((HoverEvent) null);
|
||||
message.append(String.format(plugin.translate("lookup-page-footer"), page,
|
||||
(int) Math.ceil(entries.size() / (double) perpage), entries.size()));
|
||||
player.spigot().sendMessage(message.create());
|
||||
player.sendMessage(message.create());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,6 +7,7 @@ import org.bukkit.command.CommandSender;
|
||||
import dev.heliosares.auxprotect.AuxProtect;
|
||||
import dev.heliosares.auxprotect.IAuxProtect;
|
||||
import dev.heliosares.auxprotect.utils.EntryFormatter;
|
||||
import dev.heliosares.auxprotect.utils.MySender;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.chat.HoverEvent;
|
||||
@@ -16,7 +17,7 @@ public class XrayResults extends Results {
|
||||
private IAuxProtect plugin;
|
||||
|
||||
public XrayResults(IAuxProtect plugin, ArrayList<DbEntry> entries, CommandSender player) {
|
||||
super(plugin, entries, player);
|
||||
super(plugin, entries, new MySender(player), "ap");
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@@ -63,7 +64,7 @@ public class XrayResults extends Results {
|
||||
message.append("§4§l[3]").event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format(xraycmd, 3, i)))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||
new Text("§4Rate this vein a 3/3 (almost certain or entirely certain)")));
|
||||
player.spigot().sendMessage(message.create());
|
||||
player.sendMessage(message.create());
|
||||
}
|
||||
ComponentBuilder message = new ComponentBuilder();
|
||||
message.append("§7(");
|
||||
@@ -99,7 +100,7 @@ public class XrayResults extends Results {
|
||||
message.append("§7) ").event((ClickEvent) null).event((HoverEvent) null);
|
||||
message.append(String.format(AuxProtect.getInstance().translate("lookup-page-footer"), page,
|
||||
(int) Math.ceil(entries.size() / (double) perpage), entries.size()));
|
||||
player.spigot().sendMessage(message.create());
|
||||
player.sendMessage(message.create());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package dev.heliosares.auxprotect.listeners;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
@@ -38,7 +37,6 @@ import dev.heliosares.auxprotect.AuxProtect;
|
||||
import dev.heliosares.auxprotect.database.DbEntry;
|
||||
import dev.heliosares.auxprotect.database.EntryAction;
|
||||
import dev.heliosares.auxprotect.database.PickupEntry;
|
||||
import dev.heliosares.auxprotect.database.SQLManager.LookupException;
|
||||
import dev.heliosares.auxprotect.utils.ChartRenderer;
|
||||
import dev.heliosares.auxprotect.utils.InvSerialization;
|
||||
import dev.heliosares.auxprotect.utils.MyPermission;
|
||||
@@ -149,51 +147,12 @@ public class PlayerListener implements Listener {
|
||||
logMoney(plugin, e.getPlayer(), "join");
|
||||
String ip = e.getPlayer().getAddress().getHostString();
|
||||
logSession(e.getPlayer(), true, "IP: " + ip);
|
||||
plugin.getSqlManager().updateUsername(e.getPlayer().getUniqueId().toString(), e.getPlayer().getName());
|
||||
new BukkitRunnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
HashMap<String, String> params = new HashMap<>();
|
||||
params.put("user", "$" + e.getPlayer().getUniqueId());
|
||||
params.put("action", "ip,username");
|
||||
|
||||
ArrayList<DbEntry> results = null;
|
||||
try {
|
||||
results = plugin.getSqlManager().lookup(params, null, false);
|
||||
} catch (LookupException e1) {
|
||||
plugin.warning(e1.toString());
|
||||
return;
|
||||
}
|
||||
if (results == null)
|
||||
return;
|
||||
boolean newip = true;
|
||||
String newestusername = "";
|
||||
long highestusername = 0;
|
||||
for (DbEntry entry : results) {
|
||||
if (entry.getAction() == EntryAction.IP) {
|
||||
if (!newip) {
|
||||
continue;
|
||||
}
|
||||
if (entry.getTarget().equals(ip)) {
|
||||
newip = false;
|
||||
}
|
||||
}
|
||||
if (entry.getAction() == EntryAction.USERNAME) {
|
||||
if (entry.getTime() > highestusername) {
|
||||
highestusername = entry.getTime();
|
||||
newestusername = entry.getTarget();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (newip) {
|
||||
plugin.dbRunnable.add(new DbEntry(AuxProtect.getLabel(e.getPlayer()), EntryAction.IP, false, "", 0,
|
||||
0, 0, ip, ""));
|
||||
}
|
||||
if (!e.getPlayer().getName().equals(newestusername)) {
|
||||
plugin.dbRunnable.add(new DbEntry(AuxProtect.getLabel(e.getPlayer()), EntryAction.USERNAME, false,
|
||||
"", 0, 0, 0, e.getPlayer().getName(), ""));
|
||||
}
|
||||
plugin.getSqlManager().updateUsernameAndIP(e.getPlayer().getUniqueId().toString(),
|
||||
e.getPlayer().getName(), ip);
|
||||
}
|
||||
}.runTaskAsynchronously(plugin);
|
||||
|
||||
|
||||
46
src/dev/heliosares/auxprotect/utils/BidiMap.java
Normal file
46
src/dev/heliosares/auxprotect/utils/BidiMap.java
Normal file
@@ -0,0 +1,46 @@
|
||||
package dev.heliosares.auxprotect.utils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
public class BidiMap<K, V> {
|
||||
|
||||
public BidiMap() {
|
||||
set = new HashMap<>();
|
||||
reverse = new HashMap<>();
|
||||
}
|
||||
|
||||
private HashMap<K, V> set;
|
||||
private HashMap<V, K> reverse;
|
||||
|
||||
public void clear() {
|
||||
set.clear();
|
||||
reverse.clear();
|
||||
}
|
||||
|
||||
public boolean containsKey(K key) {
|
||||
return set.containsKey(key);
|
||||
}
|
||||
|
||||
public boolean containsValue(V value) {
|
||||
return reverse.containsKey(value);
|
||||
}
|
||||
|
||||
public V get(K key) {
|
||||
return set.get(key);
|
||||
}
|
||||
|
||||
public K getKey(V value) {
|
||||
return reverse.get(value);
|
||||
}
|
||||
|
||||
public void put(K key, V value) {
|
||||
set.put(key, value);
|
||||
reverse.put(value, key);
|
||||
}
|
||||
|
||||
public Set<Entry<K, V>> entrySet() {
|
||||
return set.entrySet();
|
||||
}
|
||||
}
|
||||
110
src/dev/heliosares/auxprotect/utils/BidiMapCache.java
Normal file
110
src/dev/heliosares/auxprotect/utils/BidiMapCache.java
Normal file
@@ -0,0 +1,110 @@
|
||||
package dev.heliosares.auxprotect.utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class BidiMapCache<K, V> {
|
||||
|
||||
public BidiMapCache(long timeToLive, long cleanupInterval, boolean updateWhenAccessed) {
|
||||
set = new HashMap<>();
|
||||
reverse = new HashMap<>();
|
||||
timeAdded = new HashMap<>();
|
||||
this.timeToLive = timeToLive;
|
||||
this.cleanupInterval = cleanupInterval;
|
||||
this.lastCleanup = System.currentTimeMillis();
|
||||
this.updateWhenAccessed = updateWhenAccessed;
|
||||
}
|
||||
|
||||
private HashMap<K, V> set;
|
||||
private HashMap<V, K> reverse;
|
||||
private HashMap<K, Long> timeAdded;
|
||||
private long lastCleanup;
|
||||
private final long timeToLive;
|
||||
private final long cleanupInterval;
|
||||
private final boolean updateWhenAccessed;
|
||||
|
||||
public void clear() {
|
||||
set.clear();
|
||||
reverse.clear();
|
||||
timeAdded.clear();
|
||||
this.lastCleanup = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public boolean containsKey(K key) {
|
||||
synchronized (set) {
|
||||
return set.containsKey(key);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean containsValue(V value) {
|
||||
synchronized (set) {
|
||||
return reverse.containsKey(value);
|
||||
}
|
||||
}
|
||||
|
||||
public V get(K key) {
|
||||
synchronized (set) {
|
||||
V value = set.get(key);
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
if (updateWhenAccessed) {
|
||||
timeAdded.put(key, System.currentTimeMillis());
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public K getKey(V value) {
|
||||
synchronized (set) {
|
||||
K key = reverse.get(value);
|
||||
if (key == null) {
|
||||
return null;
|
||||
}
|
||||
if (updateWhenAccessed) {
|
||||
timeAdded.put(key, System.currentTimeMillis());
|
||||
}
|
||||
return key;
|
||||
}
|
||||
}
|
||||
|
||||
public void put(K key, V value) {
|
||||
synchronized (set) {
|
||||
set.put(key, value);
|
||||
reverse.put(value, key);
|
||||
timeAdded.put(key, System.currentTimeMillis());
|
||||
}
|
||||
}
|
||||
|
||||
public Set<Entry<K, V>> entrySet() {
|
||||
return set.entrySet();
|
||||
}
|
||||
|
||||
public void cleanup() {
|
||||
if (System.currentTimeMillis() - lastCleanup > cleanupInterval) {
|
||||
actuallyCleanup();
|
||||
lastCleanup = System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
|
||||
private void actuallyCleanup() {
|
||||
final long cutoff = System.currentTimeMillis() - timeToLive;
|
||||
synchronized (set) {
|
||||
ArrayList<K> cleanup = new ArrayList<>();
|
||||
for (Entry<K, Long> entry : timeAdded.entrySet()) {
|
||||
if (entry.getValue().longValue() < cutoff) {
|
||||
cleanup.add(entry.getKey());
|
||||
}
|
||||
}
|
||||
for (K key : cleanup) {
|
||||
timeAdded.remove(key);
|
||||
V value = set.remove(key);
|
||||
if (value != null) {
|
||||
reverse.remove(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,8 +4,6 @@ import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import dev.heliosares.auxprotect.IAuxProtect;
|
||||
import dev.heliosares.auxprotect.database.DbEntry;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
@@ -20,15 +18,15 @@ public class EntryFormatter {
|
||||
formatter = DateTimeFormatter.ofPattern("ddMMMYY HH:mm.ss");
|
||||
}
|
||||
|
||||
public static void sendEntry(IAuxProtect plugin, DbEntry en, CommandSender sender) {
|
||||
public static void sendEntry(IAuxProtect plugin, DbEntry en, MySender sender) {
|
||||
ComponentBuilder message = new ComponentBuilder();
|
||||
|
||||
message.append(String.format("§7%s ago", TimeUtil.millisToString(System.currentTimeMillis() - en.getTime()),
|
||||
en.getUser(plugin.getSqlManager())))
|
||||
en.getUser()))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text(
|
||||
"§7" + Instant.ofEpochMilli(en.getTime()).atZone(ZoneId.systemDefault()).format(formatter))));
|
||||
|
||||
message.append(String.format(" §f- §9%s §f%s §9%s§f §7%s", en.getUser(plugin.getSqlManager()),
|
||||
message.append(String.format(" §f- §9%s §f%s §9%s§f §7%s", en.getUser(),
|
||||
plugin.translate(en.getAction().getLang(en.getState())), en.getTarget(),
|
||||
(en.getData() != null && en.getData().length() > 0) ? "(" + en.getData() + ")" : "") + "\n")
|
||||
.event((HoverEvent) null);
|
||||
@@ -37,6 +35,6 @@ public class EntryFormatter {
|
||||
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
|
||||
String.format("/ap tp %d %d %d %s", en.x, en.y, en.z, en.world)))
|
||||
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("§fClick to Teleport!")));
|
||||
sender.spigot().sendMessage(message.create());
|
||||
sender.sendMessage(message.create());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ import org.bukkit.util.io.BukkitObjectInputStream;
|
||||
import org.bukkit.util.io.BukkitObjectOutputStream;
|
||||
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
|
||||
|
||||
import dev.heliosares.auxprotect.AuxProtect;
|
||||
|
||||
public class InvSerialization {
|
||||
public static String playerToBase64(Player player) {
|
||||
String str1 = toBase64(player.getInventory().getStorageContents());
|
||||
@@ -36,8 +38,8 @@ public class InvSerialization {
|
||||
|
||||
bukkitObjectOutputStream.close();
|
||||
return Base64Coder.encodeLines(byteArrayOutputStream.toByteArray());
|
||||
} catch (IOException exception) {
|
||||
exception.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
AuxProtect.getInstance().print(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -51,8 +53,8 @@ public class InvSerialization {
|
||||
|
||||
bukkitObjectOutputStream.close();
|
||||
return itemSeparator + Base64Coder.encodeLines(byteArrayOutputStream.toByteArray());
|
||||
} catch (IOException exception) {
|
||||
exception.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
AuxProtect.getInstance().print(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -84,8 +86,8 @@ public class InvSerialization {
|
||||
|
||||
bukkitObjectOutputStream.close();
|
||||
return Base64Coder.encodeLines(byteArrayOutputStream.toByteArray());
|
||||
} catch (IOException exception) {
|
||||
exception.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
AuxProtect.getInstance().print(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -104,8 +106,8 @@ public class InvSerialization {
|
||||
|
||||
bukkitObjectInputStream.close();
|
||||
return inventory;
|
||||
} catch (Exception exc) {
|
||||
exc.printStackTrace();
|
||||
} catch (Exception e) {
|
||||
AuxProtect.getInstance().print(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -126,8 +128,8 @@ public class InvSerialization {
|
||||
|
||||
bukkitObjectInputStream.close();
|
||||
return arrayOfItemStack;
|
||||
} catch (Exception exc) {
|
||||
exc.printStackTrace();
|
||||
} catch (Exception e) {
|
||||
AuxProtect.getInstance().print(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -146,8 +148,8 @@ public class InvSerialization {
|
||||
|
||||
bukkitObjectInputStream.close();
|
||||
return itemStack;
|
||||
} catch (Exception exc) {
|
||||
exc.printStackTrace();
|
||||
} catch (Exception e) {
|
||||
AuxProtect.getInstance().print(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -13,9 +13,7 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.map.MapCanvas;
|
||||
import org.bukkit.map.MapView;
|
||||
import org.bukkit.map.MinecraftFont;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import dev.heliosares.auxprotect.AuxProtect;
|
||||
import dev.heliosares.auxprotect.IAuxProtect;
|
||||
import dev.heliosares.auxprotect.database.DbEntry;
|
||||
|
||||
public class MoneySolver extends ChartRenderer {
|
||||
@@ -47,7 +45,7 @@ public class MoneySolver extends ChartRenderer {
|
||||
currentMoney = Double.parseDouble(result.getData().substring(1).replaceAll(",", ""));
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
currentMoney = Double.parseDouble(result.targetUuid.substring(1).replaceAll(",", ""));
|
||||
currentMoney = Double.parseDouble(result.getTargetUUID().substring(1).replaceAll(",", ""));
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
return;
|
||||
@@ -115,13 +113,13 @@ public class MoneySolver extends ChartRenderer {
|
||||
}
|
||||
}
|
||||
|
||||
public static void showMoney(AuxProtect plugin, Player player, ArrayList<DbEntry> results, int time, String users) {
|
||||
new BukkitRunnable() {
|
||||
public static void showMoney(IAuxProtect plugin, Player player, ArrayList<DbEntry> results, int time, String users) {
|
||||
plugin.runSync(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
MoneySolver solver = new MoneySolver(player, results, time, users);
|
||||
player.getInventory().addItem(solver.asItem(player));
|
||||
}
|
||||
}.runTask(plugin);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,10 @@ public enum MyPermission {
|
||||
return player.hasPermission(node);
|
||||
}
|
||||
|
||||
public boolean hasPermission(MySender player) {
|
||||
return player.hasPermission(node);
|
||||
}
|
||||
|
||||
public boolean hasPermission(net.md_5.bungee.api.CommandSender player) {
|
||||
return player.hasPermission(node);
|
||||
}
|
||||
|
||||
78
src/dev/heliosares/auxprotect/utils/MySender.java
Normal file
78
src/dev/heliosares/auxprotect/utils/MySender.java
Normal file
@@ -0,0 +1,78 @@
|
||||
package dev.heliosares.auxprotect.utils;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
public class MySender {
|
||||
|
||||
private final Object sender;
|
||||
private final boolean bungee;
|
||||
|
||||
public MySender(org.bukkit.command.CommandSender sender) {
|
||||
this.sender = sender;
|
||||
this.bungee = false;
|
||||
}
|
||||
|
||||
public MySender(net.md_5.bungee.api.CommandSender sender) {
|
||||
this.sender = sender;
|
||||
this.bungee = true;
|
||||
}
|
||||
|
||||
public Object getSender() {
|
||||
return sender;
|
||||
}
|
||||
|
||||
public boolean isBungee() {
|
||||
return bungee;
|
||||
}
|
||||
|
||||
public void sendMessage(String message) {
|
||||
if (bungee) {
|
||||
((net.md_5.bungee.api.CommandSender) sender).sendMessage(TextComponent.fromLegacyText(message));
|
||||
} else {
|
||||
((org.bukkit.command.CommandSender) sender).sendMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendMessage(BaseComponent... message) {
|
||||
if (bungee) {
|
||||
((net.md_5.bungee.api.CommandSender) sender).sendMessage(message);
|
||||
} else {
|
||||
((org.bukkit.command.CommandSender) sender).spigot().sendMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasPermission(String node) {
|
||||
if (bungee) {
|
||||
return ((net.md_5.bungee.api.CommandSender) sender).hasPermission(node);
|
||||
} else {
|
||||
return ((org.bukkit.command.CommandSender) sender).hasPermission(node);
|
||||
}
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
if (bungee) {
|
||||
return ((net.md_5.bungee.api.CommandSender) sender).getName();
|
||||
} else {
|
||||
return ((org.bukkit.command.CommandSender) sender).getName();
|
||||
}
|
||||
}
|
||||
|
||||
public UUID getUniqueId() {
|
||||
if (bungee) {
|
||||
if (sender instanceof ProxiedPlayer) {
|
||||
return ((ProxiedPlayer) sender).getUniqueId();
|
||||
}
|
||||
} else {
|
||||
if (sender instanceof Player) {
|
||||
return ((Player) sender).getUniqueId();
|
||||
}
|
||||
}
|
||||
return UUID.fromString("00000000-0000-0000-0000-000000000000");
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import org.bukkit.plugin.java.JavaPlugin;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Scanner;
|
||||
|
||||
// From: https://www.spigotmc.org/wiki/creating-an-update-checker-that-checks-for-updates
|
||||
@@ -22,42 +23,43 @@ public class UpdateChecker {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static int[] versionAsIntArray(String version) {
|
||||
String[] parts = version.split("\\.");
|
||||
public static Integer[] versionAsIntArray(String version) {
|
||||
String[] parts = version.split("[\\.|\\-]+");
|
||||
if (version.startsWith("v")) {
|
||||
version = version.substring(1);
|
||||
}
|
||||
int array[] = new int[parts.length];
|
||||
ArrayList<Integer> array = new ArrayList<>();
|
||||
for (int i = 0; i < parts.length; i++) {
|
||||
try {
|
||||
array[i] = Integer.parseInt(parts[i]);
|
||||
int part = 0;
|
||||
if (parts[i].startsWith("pre")) {
|
||||
part = Integer.parseInt(parts[i].substring(3)) - 1000000;
|
||||
} else {
|
||||
part = Integer.parseInt(parts[i]);
|
||||
}
|
||||
array.add(part);
|
||||
} catch (NumberFormatException ignored) {
|
||||
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
public static String getHigherVersion(String ver1, String ver2) {
|
||||
int compare = compareVersions(ver1, ver2);
|
||||
if (compare == -1) {
|
||||
return ver1;
|
||||
}
|
||||
if (compare == 1) {
|
||||
return ver2;
|
||||
}
|
||||
return "equal";
|
||||
return array.toArray(new Integer[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns -1 if ver1 is greater, 0 if equal, 1 if ver2 i greater
|
||||
*/
|
||||
public static int compareVersions(String ver1, String ver2) {
|
||||
int[] ver1int = versionAsIntArray(ver1);
|
||||
int[] ver2int = versionAsIntArray(ver2);
|
||||
for (int i = 0; i < ver1int.length && i < ver2int.length; i++) {
|
||||
int ver1part = ver1int[i];
|
||||
int ver2part = ver2int[i];
|
||||
Integer[] ver1int = versionAsIntArray(ver1);
|
||||
Integer[] ver2int = versionAsIntArray(ver2);
|
||||
for (int i = 0; i < ver1int.length || i < ver2int.length; i++) {
|
||||
int ver1part = 0;
|
||||
int ver2part = 0;
|
||||
if (i < ver1int.length) {
|
||||
ver1part = ver1int[i];
|
||||
}
|
||||
if (i < ver2int.length) {
|
||||
ver2part = ver2int[i];
|
||||
}
|
||||
if (ver1part > ver2part) {
|
||||
return -1;
|
||||
}
|
||||
@@ -65,12 +67,6 @@ public class UpdateChecker {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (ver1int.length > ver2int.length) {
|
||||
return -1;
|
||||
}
|
||||
if (ver1int.length < ver2int.length) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -20,9 +20,9 @@ public class XraySolver {
|
||||
HashMap<String, ArrayList<DbEntry>> hash = new HashMap<>();
|
||||
for (int i = entries.size() - 1; i >= 0; i--) {
|
||||
DbEntry entry = entries.get(i);
|
||||
ArrayList<DbEntry> hits = hash.get(entry.userUuid);
|
||||
ArrayList<DbEntry> hits = hash.get(entry.getUserUUID());
|
||||
if (hits == null) {
|
||||
hash.put(entry.userUuid, hits = new ArrayList<>());
|
||||
hash.put(entry.getUserUUID(), hits = new ArrayList<>());
|
||||
}
|
||||
if (entry.getAction() == EntryAction.XRAYCHECK) {
|
||||
hits.add(entry);
|
||||
@@ -41,7 +41,7 @@ public class XraySolver {
|
||||
}
|
||||
}
|
||||
if (score >= 6) {
|
||||
String user = entries1.get(0).getUser(plugin.getSqlManager());
|
||||
String user = entries1.get(0).getUser();
|
||||
String tooltip = "§4Hits for '" + user + "':\n";
|
||||
for (DbEntry entry : entries1) {
|
||||
switch (entry.getTarget()) {
|
||||
|
||||
@@ -48,7 +48,7 @@ public class YMLManager {
|
||||
Files.copy(plugin.getResource(fileName + ".yml"), dfile.toPath());
|
||||
reload();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
plugin.print(e);
|
||||
}
|
||||
}
|
||||
save();
|
||||
|
||||
Reference in New Issue
Block a user