diff --git a/config.yml b/config.yml index f50fe7c..61bab02 100644 --- a/config.yml +++ b/config.yml @@ -1,6 +1,18 @@ #AuxProtect #Developed by Heliosares #https://www.spigotmc.org/resources/auxprotect.99147/ + +# MySQL functionality is experimental. Use with caution. +# OLD LOGS WILL NOT BE MIGRATED. +MySQL: + use: false + host: localhost + port: 3306 + database: database + username: username + password: password +#Prefix to be used for all table names. Editing this after creating your databases will cause all past data to be lost. + table-prefix: '' purge-cmds: - 'auxprotect 90d' - 'auxprotect_spam 30d' @@ -62,6 +74,8 @@ Actions: Enabled: true ahbuy: Enabled: true + elytra: + Enabled: true #Automatically check for updates and display notifications in game. #It's recommended to leave this enabled, as I'm constantly improving the plugin. checkforupdates: true \ No newline at end of file diff --git a/en-us.yml b/en-us.yml index 14e4889..35e56a1 100644 --- a/en-us.yml +++ b/en-us.yml @@ -87,6 +87,9 @@ actions: command: executed kill: killed land: projectile landed + elytra: + p: started flying + n: stopped flying ignoreabandoned: ignored abandoned warning ip: Unique IP username: username diff --git a/plugin.yml b/plugin.yml index e7c79cb..93c2f4b 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,5 +1,5 @@ name: AuxProtect -version: 1.0.7 +version: 1.0.8 main: dev.heliosares.auxprotect.AuxProtect description: A plugin designed to suplement CoreProtect in a few ways. api-version: 1.13 diff --git a/pom.xml b/pom.xml index a190481..b3cae8c 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 AuxProtect AuxProtect - 1.0.7 + 1.0.8 AuxProtect ${myPath}/plugins @@ -109,6 +109,11 @@ system ${myPath}/plugins/AuctionHouse-1.18-3.1.jar + + com.github.Gypopo + EconomyShopGUI-API + 1.0.1 + ${env.USERPROFILE}/Documents/TestServer/Test1/ diff --git a/src/dev/heliosares/auxprotect/APConfig.java b/src/dev/heliosares/auxprotect/APConfig.java index 3a13815..4bdf683 100644 --- a/src/dev/heliosares/auxprotect/APConfig.java +++ b/src/dev/heliosares/auxprotect/APConfig.java @@ -30,7 +30,7 @@ public class APConfig { inventoryInterval = config.getLong("Actions.inventory.Interval", 3600000); moneyInterval = config.getLong("Actions.money.Interval", 600000); for (EntryAction action : EntryAction.values()) { - boolean enabled = config.getBoolean("Actions." + action.toString().toLowerCase() + ".Enabled", false); + boolean enabled = config.getBoolean("Actions." + action.toString().toLowerCase() + ".Enabled", true); action.setEnabled(enabled); } } diff --git a/src/dev/heliosares/auxprotect/AuxProtect.java b/src/dev/heliosares/auxprotect/AuxProtect.java index 0f5deab..5ed947b 100644 --- a/src/dev/heliosares/auxprotect/AuxProtect.java +++ b/src/dev/heliosares/auxprotect/AuxProtect.java @@ -26,7 +26,7 @@ import dev.heliosares.auxprotect.command.PurgeCommand; import dev.heliosares.auxprotect.database.DatabaseRunnable; import dev.heliosares.auxprotect.database.DbEntry; import dev.heliosares.auxprotect.database.EntryAction; -import dev.heliosares.auxprotect.database.SQLiteManager; +import dev.heliosares.auxprotect.database.SQLManager; import dev.heliosares.auxprotect.listeners.*; import dev.heliosares.auxprotect.utils.InvSerialization; import dev.heliosares.auxprotect.utils.Language; @@ -62,7 +62,7 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect { private Economy econ; private static AuxProtect instance; - SQLiteManager sqlManager; + SQLManager sqlManager; public String update; long lastCheckedForUpdate; @@ -107,31 +107,51 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect { } debug("Compatability version: " + SERVER_VERSION, 1); - 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.setEnabled(false); - return; - } - } - if (!sqliteFile.exists()) { - try { - if (!sqliteFile.createNewFile()) { - throw new IOException(); + boolean mysql = getConfig().getBoolean("MySQL.use", false); + String user = getConfig().getString("MySQL.username", ""); + String pass = getConfig().getString("MySQL.password", ""); + String uri = ""; + if (mysql) { + String host = getConfig().getString("MySQL.host", "localhost"); + String port = getConfig().getString("MySQL.port", "3306"); + String database = getConfig().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.setEnabled(false); + return; } - } catch (IOException e) { - this.getLogger().severe("Failed to create database file."); - this.setEnabled(false); - return; } + if (!sqliteFile.exists()) { + try { + if (!sqliteFile.createNewFile()) { + throw new IOException(); + } + } catch (IOException e) { + this.getLogger().severe("Failed to create database file."); + this.setEnabled(false); + return; + } + } + uri = "jdbc:sqlite:" + sqliteFile.getAbsolutePath(); } - sqlManager = new SQLiteManager(this, "jdbc:sqlite:" + sqliteFile.getAbsolutePath()); + + sqlManager = new SQLManager(this, uri, getConfig().getString("MySQL.table-prefix")); + new BukkitRunnable() { @Override public void run() { - if (!sqlManager.connect()) { + boolean success = false; + if (mysql) { + success = sqlManager.connect(user, pass); + } else { + success = sqlManager.connect(); + } + if (!success) { getLogger().severe("Failed to connect to SQL database. Disabling."); setEnabled(false); return; @@ -312,7 +332,7 @@ public class AuxProtect extends JavaPlugin implements IAuxProtect { } } - public SQLiteManager getSqlManager() { + public SQLManager getSqlManager() { return sqlManager; } diff --git a/src/dev/heliosares/auxprotect/IAuxProtect.java b/src/dev/heliosares/auxprotect/IAuxProtect.java index c8ad7c0..e1c3ff4 100644 --- a/src/dev/heliosares/auxprotect/IAuxProtect.java +++ b/src/dev/heliosares/auxprotect/IAuxProtect.java @@ -3,7 +3,7 @@ package dev.heliosares.auxprotect; import java.io.File; import java.io.InputStream; -import dev.heliosares.auxprotect.database.SQLiteManager; +import dev.heliosares.auxprotect.database.SQLManager; public interface IAuxProtect { @@ -23,7 +23,7 @@ public interface IAuxProtect { boolean isBungee(); - SQLiteManager getSqlManager(); + SQLManager getSqlManager(); int getDebug(); diff --git a/src/dev/heliosares/auxprotect/bungee/APListener.java b/src/dev/heliosares/auxprotect/bungee/APListener.java index a548df2..f46c1de 100644 --- a/src/dev/heliosares/auxprotect/bungee/APListener.java +++ b/src/dev/heliosares/auxprotect/bungee/APListener.java @@ -6,7 +6,7 @@ import java.util.UUID; import dev.heliosares.auxprotect.database.DbEntry; import dev.heliosares.auxprotect.database.EntryAction; -import dev.heliosares.auxprotect.database.SQLiteManager.LookupException; +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; diff --git a/src/dev/heliosares/auxprotect/bungee/AuxProtectBungee.java b/src/dev/heliosares/auxprotect/bungee/AuxProtectBungee.java index 6199f8b..09b6ef4 100644 --- a/src/dev/heliosares/auxprotect/bungee/AuxProtectBungee.java +++ b/src/dev/heliosares/auxprotect/bungee/AuxProtectBungee.java @@ -13,7 +13,7 @@ import dev.heliosares.auxprotect.AuxProtect; import dev.heliosares.auxprotect.IAuxProtect; import dev.heliosares.auxprotect.bungee.command.APCommand; import dev.heliosares.auxprotect.database.DatabaseRunnable; -import dev.heliosares.auxprotect.database.SQLiteManager; +import dev.heliosares.auxprotect.database.SQLManager; import dev.heliosares.auxprotect.listeners.ChestShopListener; import dev.heliosares.auxprotect.listeners.EntityListener; import dev.heliosares.auxprotect.listeners.GuiShopListener; @@ -34,7 +34,7 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect { protected Configuration config; public Language lang; public int debug; - SQLiteManager sqlManager; + SQLManager sqlManager; public DatabaseRunnable dbRunnable; private static AuxProtectBungee instance; @@ -71,7 +71,7 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect { return; } } - sqlManager = new SQLiteManager(this, "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(); @@ -121,7 +121,7 @@ public class AuxProtectBungee extends Plugin implements Listener, IAuxProtect { return getResourceAsStream(string); } - public SQLiteManager getSqlManager() { + public SQLManager getSqlManager() { return sqlManager; } diff --git a/src/dev/heliosares/auxprotect/bungee/command/LookupCommand.java b/src/dev/heliosares/auxprotect/bungee/command/LookupCommand.java index 13676fa..893971f 100644 --- a/src/dev/heliosares/auxprotect/bungee/command/LookupCommand.java +++ b/src/dev/heliosares/auxprotect/bungee/command/LookupCommand.java @@ -10,7 +10,7 @@ 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.SQLiteManager.LookupException; +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; diff --git a/src/dev/heliosares/auxprotect/command/APCommand.java b/src/dev/heliosares/auxprotect/command/APCommand.java index 76c40f1..3f8f368 100644 --- a/src/dev/heliosares/auxprotect/command/APCommand.java +++ b/src/dev/heliosares/auxprotect/command/APCommand.java @@ -3,6 +3,7 @@ package dev.heliosares.auxprotect.command; import java.sql.SQLException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.List; import org.bukkit.Bukkit; import org.bukkit.command.Command; @@ -174,7 +175,7 @@ public class APCommand implements CommandExecutor { sender.sendMessage("§7Average record time per execution: §9" + Math.round(plugin.getSqlManager().putTimePerExec.getMean() / 1000.0) / 1000.0 + "§7ms"); return true; - } else if (args[0].equalsIgnoreCase("sql")) { + } else if (args[0].equalsIgnoreCase("sql") || args[0].equalsIgnoreCase("sqlu")) { if (!MyPermission.SQL.hasPermission(sender) || !sender.equals(Bukkit.getConsoleSender())) { sender.sendMessage(plugin.translate("no-permission")); return true; @@ -184,7 +185,20 @@ public class APCommand implements CommandExecutor { msg += args[i] + " "; } try { - plugin.getSqlManager().execute(msg.trim()); + if (args[0].equalsIgnoreCase("sql")) { + plugin.getSqlManager().execute(msg.trim()); + } else { + List> results = plugin.getSqlManager().executeUpdate(msg.trim()); + if (results != null) { + for (List result : results) { + String line = ""; + for (String part : result) { + line += part + ", "; + } + sender.sendMessage(line); + } + } + } } catch (SQLException e) { sender.sendMessage("§cAn error occured."); e.printStackTrace(); diff --git a/src/dev/heliosares/auxprotect/command/LookupCommand.java b/src/dev/heliosares/auxprotect/command/LookupCommand.java index ab374c4..43733c3 100644 --- a/src/dev/heliosares/auxprotect/command/LookupCommand.java +++ b/src/dev/heliosares/auxprotect/command/LookupCommand.java @@ -14,7 +14,7 @@ import dev.heliosares.auxprotect.AuxProtect; import dev.heliosares.auxprotect.database.DbEntry; import dev.heliosares.auxprotect.database.EntryAction; import dev.heliosares.auxprotect.database.Results; -import dev.heliosares.auxprotect.database.SQLiteManager.LookupException; +import dev.heliosares.auxprotect.database.SQLManager.LookupException; import dev.heliosares.auxprotect.utils.MoneySolver; import dev.heliosares.auxprotect.utils.MyPermission; import dev.heliosares.auxprotect.utils.PlayTimeSolver; diff --git a/src/dev/heliosares/auxprotect/command/LookupCommandTab.java b/src/dev/heliosares/auxprotect/command/LookupCommandTab.java index 181e2ee..513f0cd 100644 --- a/src/dev/heliosares/auxprotect/command/LookupCommandTab.java +++ b/src/dev/heliosares/auxprotect/command/LookupCommandTab.java @@ -15,8 +15,8 @@ import org.bukkit.util.StringUtil; import dev.heliosares.auxprotect.AuxProtect; import dev.heliosares.auxprotect.database.EntryAction; -import dev.heliosares.auxprotect.database.SQLiteManager; -import dev.heliosares.auxprotect.database.SQLiteManager.TABLE; +import dev.heliosares.auxprotect.database.SQLManager; +import dev.heliosares.auxprotect.database.SQLManager.TABLE; import dev.heliosares.auxprotect.utils.MyPermission; public class LookupCommandTab implements TabCompleter { @@ -76,7 +76,7 @@ public class LookupCommandTab implements TabCompleter { if (MyPermission.ADMIN.hasPermission(sender)) { possible.add("db:"); if (currentArg.startsWith("db:")) { - for (TABLE table : SQLiteManager.TABLE.values()) { + for (TABLE table : SQLManager.TABLE.values()) { possible.add("db:" + table.toString()); } } diff --git a/src/dev/heliosares/auxprotect/command/PurgeCommand.java b/src/dev/heliosares/auxprotect/command/PurgeCommand.java index 6aacd7b..b63b9ad 100644 --- a/src/dev/heliosares/auxprotect/command/PurgeCommand.java +++ b/src/dev/heliosares/auxprotect/command/PurgeCommand.java @@ -10,7 +10,7 @@ import org.bukkit.command.CommandSender; import dev.heliosares.auxprotect.AuxProtect; import dev.heliosares.auxprotect.database.Results; -import dev.heliosares.auxprotect.database.SQLiteManager.TABLE; +import dev.heliosares.auxprotect.database.SQLManager.TABLE; import dev.heliosares.auxprotect.utils.TimeUtil; public class PurgeCommand implements CommandExecutor { diff --git a/src/dev/heliosares/auxprotect/command/PurgeCommandTab.java b/src/dev/heliosares/auxprotect/command/PurgeCommandTab.java index c1f0643..1efb66b 100644 --- a/src/dev/heliosares/auxprotect/command/PurgeCommandTab.java +++ b/src/dev/heliosares/auxprotect/command/PurgeCommandTab.java @@ -9,7 +9,7 @@ import org.bukkit.command.TabCompleter; import org.bukkit.util.StringUtil; import dev.heliosares.auxprotect.AuxProtect; -import dev.heliosares.auxprotect.database.SQLiteManager; +import dev.heliosares.auxprotect.database.SQLManager; public class PurgeCommandTab implements TabCompleter { // private final AuxProtect plugin; @@ -24,7 +24,7 @@ public class PurgeCommandTab implements TabCompleter { String currentArg = args[args.length - 1]; if (args.length == 2) { - for (SQLiteManager.TABLE table : SQLiteManager.TABLE.values()) { + for (SQLManager.TABLE table : SQLManager.TABLE.values()) { possible.add(table.toString()); } } diff --git a/src/dev/heliosares/auxprotect/command/XrayCommand.java b/src/dev/heliosares/auxprotect/command/XrayCommand.java index 07403c1..e6b6a94 100644 --- a/src/dev/heliosares/auxprotect/command/XrayCommand.java +++ b/src/dev/heliosares/auxprotect/command/XrayCommand.java @@ -22,8 +22,8 @@ import dev.heliosares.auxprotect.database.EntryAction; import dev.heliosares.auxprotect.database.Results; import dev.heliosares.auxprotect.database.XrayEntry; import dev.heliosares.auxprotect.database.XrayResults; -import dev.heliosares.auxprotect.database.SQLiteManager.LookupException; -import dev.heliosares.auxprotect.database.SQLiteManager.TABLE; +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.TimeUtil; diff --git a/src/dev/heliosares/auxprotect/database/DatabaseRunnable.java b/src/dev/heliosares/auxprotect/database/DatabaseRunnable.java index c737d9a..bb5debf 100644 --- a/src/dev/heliosares/auxprotect/database/DatabaseRunnable.java +++ b/src/dev/heliosares/auxprotect/database/DatabaseRunnable.java @@ -6,15 +6,15 @@ import java.util.Iterator; import java.util.concurrent.ConcurrentLinkedQueue; import dev.heliosares.auxprotect.IAuxProtect; -import dev.heliosares.auxprotect.database.SQLiteManager.TABLE; +import dev.heliosares.auxprotect.database.SQLManager.TABLE; public class DatabaseRunnable implements Runnable { private ConcurrentLinkedQueue queue; private ConcurrentLinkedQueue lookupqueue; - private final SQLiteManager sqlManager; + private final SQLManager sqlManager; private final IAuxProtect plugin; - public DatabaseRunnable(IAuxProtect plugin, SQLiteManager sqlManager) { + public DatabaseRunnable(IAuxProtect plugin, SQLManager sqlManager) { queue = new ConcurrentLinkedQueue<>(); lookupqueue = new ConcurrentLinkedQueue<>(); this.sqlManager = sqlManager; diff --git a/src/dev/heliosares/auxprotect/database/DbEntry.java b/src/dev/heliosares/auxprotect/database/DbEntry.java index 714f000..8d4f175 100644 --- a/src/dev/heliosares/auxprotect/database/DbEntry.java +++ b/src/dev/heliosares/auxprotect/database/DbEntry.java @@ -73,7 +73,7 @@ public class DbEntry { this.data = data; } - public String getUser(SQLiteManager sqlManager) { + public String getUser(SQLManager sqlManager) { if (user != null) { return user; } diff --git a/src/dev/heliosares/auxprotect/database/EntryAction.java b/src/dev/heliosares/auxprotect/database/EntryAction.java index 6a1027c..e20fdeb 100644 --- a/src/dev/heliosares/auxprotect/database/EntryAction.java +++ b/src/dev/heliosares/auxprotect/database/EntryAction.java @@ -1,6 +1,6 @@ package dev.heliosares.auxprotect.database; -import dev.heliosares.auxprotect.database.SQLiteManager.TABLE; +import dev.heliosares.auxprotect.database.SQLManager.TABLE; public enum EntryAction { // TODO Migrate Kick to singles @@ -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), + POS(256), HURT(257), INV(258, 259), COMMAND(260), KILL(261), LAND(262), ELYTRA(263, 264), // END SPAM(511) // START IGNOREABANDONED(512) diff --git a/src/dev/heliosares/auxprotect/database/SQLiteManager.java b/src/dev/heliosares/auxprotect/database/SQLManager.java similarity index 89% rename from src/dev/heliosares/auxprotect/database/SQLiteManager.java rename to src/dev/heliosares/auxprotect/database/SQLManager.java index e3cdd8f..67c2c9f 100644 --- a/src/dev/heliosares/auxprotect/database/SQLiteManager.java +++ b/src/dev/heliosares/auxprotect/database/SQLManager.java @@ -4,10 +4,13 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; import java.util.Map.Entry; import java.util.UUID; @@ -20,10 +23,12 @@ import org.bukkit.command.CommandSender; import dev.heliosares.auxprotect.IAuxProtect; import dev.heliosares.auxprotect.utils.MovingAverage; -public class SQLiteManager { +public class SQLManager { private Connection connection; - private String dbFile; + private String targetString; private final IAuxProtect plugin; + private static String tablePrefix; + private boolean mysql; private boolean isConnected; @@ -32,6 +37,8 @@ public class SQLiteManager { private int version; + public static final int DBVERSION = 2; + public int getCount() { return count; } @@ -50,23 +57,31 @@ public class SQLiteManager { private int count; public static enum TABLE { - AUXPROTECT, AUXPROTECT_SPAM, AUXPROTECT_LONGTERM, AUXPROTECT_ABANDONED, AUXPROTECT_INVENTORY, WORLDS; + AUXPROTECT, AUXPROTECT_SPAM, AUXPROTECT_LONGTERM, AUXPROTECT_ABANDONED, AUXPROTECT_INVENTORY, AUXPROTECT_WORLDS; @Override public String toString() { - return super.toString().toLowerCase(); + return tablePrefix + super.toString().toLowerCase(); } } public String holdingConnection; public long holdingConnectionSince; - public SQLiteManager(IAuxProtect plugin, String dbFile) { + public SQLManager(IAuxProtect plugin, String target, String prefix) { this.plugin = plugin; - this.dbFile = dbFile; + this.targetString = target; + if (prefix == null) { + tablePrefix = ""; + } else { + tablePrefix = prefix; + if (tablePrefix.length() > 0 && !tablePrefix.endsWith("_")) { + tablePrefix += "_"; + } + } } - public boolean connect() { + public boolean connect(String user, String pass) { boolean driver = false; if (!driver) try { @@ -92,7 +107,13 @@ public class SQLiteManager { } try { - connection = DriverManager.getConnection(dbFile); + if (user != null && pass != null) { + mysql = true; + connection = DriverManager.getConnection(targetString, user, pass); + } else { + mysql = false; + connection = DriverManager.getConnection(targetString); + } init(); isConnected = true; @@ -103,6 +124,10 @@ public class SQLiteManager { return false; } + public boolean connect() { + return connect(null, null); + } + public void close() { if (connection != null) { synchronized (connection) { @@ -139,7 +164,7 @@ public class SQLiteManager { version = version_; versionTime = versionTime_; } - plugin.debug("Version at " + versionTime_ + " was v" + version_ + ".", 5); + plugin.debug("Version at " + versionTime_ + " was v" + version_ + ".", 1); } results.close(); @@ -147,10 +172,25 @@ public class SQLiteManager { PreparedStatement pstmt = connection .prepareStatement("INSERT INTO version (time,version) VALUES (?,?)"); pstmt.setLong(1, System.currentTimeMillis()); - pstmt.setInt(2, 1); - plugin.debug("Updating database to v1", 1); + pstmt.setInt(2, DBVERSION); + plugin.debug("Setting database to v" + DBVERSION, 1); pstmt.execute(); pstmt.close(); + } else { + // This is inside an else so that it's only done if this isn't the first time + // running the plugin. + if (version < 2) { + plugin.info("Migrating database to v2"); + execute("ALTER TABLE worlds RENAME TO auxprotect_worlds;"); + + PreparedStatement pstmt = connection + .prepareStatement("INSERT INTO version (time,version) VALUES (?,?)"); + pstmt.setLong(1, System.currentTimeMillis()); + pstmt.setInt(2, 2); + pstmt.execute(); + pstmt.close(); + plugin.info("Done migrating."); + } } stmt = "CREATE TABLE IF NOT EXISTS " + TABLE.AUXPROTECT.toString() + " (\n"; @@ -222,11 +262,12 @@ public class SQLiteManager { statement.execute(stmt); } - stmt = "CREATE TABLE IF NOT EXISTS " + TABLE.WORLDS.toString() + " (name varchar(255), wid SMALLINT);"; + stmt = "CREATE TABLE IF NOT EXISTS " + TABLE.AUXPROTECT_WORLDS.toString() + + " (name varchar(255), wid SMALLINT);"; plugin.debug(stmt, 3); statement.execute(stmt); - stmt = "SELECT * FROM " + TABLE.WORLDS + ";"; + stmt = "SELECT * FROM " + TABLE.AUXPROTECT_WORLDS.toString() + ";"; plugin.debug(stmt, 3); results = statement.executeQuery(stmt); while (results.next()) { @@ -246,11 +287,37 @@ public class SQLiteManager { } } - public void execute(String string) throws SQLException { + public void execute(String stmt) throws SQLException { + plugin.debug(stmt, 2); + Statement statement = connection.createStatement(); + statement.execute(stmt); + statement.close(); + } + + public List> executeUpdate(String string) throws SQLException { plugin.debug(string, 2); Statement statement = connection.createStatement(); - statement.execute(string); + ResultSet rs = statement.executeQuery(string); + + if (rs == null) { + statement.close(); + return null; + } + final ResultSetMetaData meta = rs.getMetaData(); + final int columnCount = meta.getColumnCount(); + final List> rowList = new LinkedList>(); + while (rs.next()) { + final List columnList = new LinkedList(); + rowList.add(columnList); + + for (int column = 1; column <= columnCount; ++column) { + final Object value = rs.getObject(column); + columnList.add(String.valueOf(value)); + } + } + rs.close(); statement.close(); + return rowList; } protected long put(TABLE table, ArrayList entries) throws SQLException { @@ -293,7 +360,7 @@ public class SQLiteManager { stmt += ","; } } - PreparedStatement statement = connection.prepareStatement(stmt); + PreparedStatement statement = connection.prepareStatement(stmt, Statement.RETURN_GENERATED_KEYS); int i = 1; for (DbEntry dbEntry : entries) { @@ -571,7 +638,7 @@ public class SQLiteManager { } else if (table == TABLE.AUXPROTECT_ABANDONED) { stmt = "SELECT time, user, action_id, world_id, x, y, z, target FROM " + table.toString() + stmt; hasData = false; - } else if (table == TABLE.WORLDS && plugin.getDebug() > 0) { + } else if (table == TABLE.AUXPROTECT_WORLDS && plugin.getDebug() > 0) { stmt = "SELECT * FROM " + table.toString(); plugin.debug(stmt, 3); try { @@ -861,7 +928,7 @@ public class SQLiteManager { } try { - String stmt = "INSERT INTO " + TABLE.WORLDS.toString() + " (name, wid)"; + String stmt = "INSERT INTO " + TABLE.AUXPROTECT_WORLDS.toString() + " (name, wid)"; stmt += "\nVALUES (?,?)"; PreparedStatement pstmt = connection.prepareStatement(stmt); pstmt.setString(1, world); @@ -889,9 +956,19 @@ public class SQLiteManager { holdingConnectionSince = System.currentTimeMillis(); holdingConnection = "count"; try { - PreparedStatement pstmt = connection.prepareStatement("SELECT COUNT(1) FROM " + table.toString()); + String stmtStr = ""; + if (mysql) { + stmtStr = "SELECT COUNT(*) FROM " + table.toString(); + } else { + stmtStr = "SELECT COUNT(1) FROM " + table.toString(); + } + plugin.debug(stmtStr, 5); + PreparedStatement pstmt = connection.prepareStatement(stmtStr); ResultSet rs = pstmt.executeQuery(); - int count = rs.getInt(1); + int count = 0; + if (rs.next()) { + count = rs.getInt(1); + } total += count; plugin.debug(table.toString() + ": " + count + " rows."); rs.close(); diff --git a/src/dev/heliosares/auxprotect/listeners/PlayerListener.java b/src/dev/heliosares/auxprotect/listeners/PlayerListener.java index cebed29..652ffe6 100644 --- a/src/dev/heliosares/auxprotect/listeners/PlayerListener.java +++ b/src/dev/heliosares/auxprotect/listeners/PlayerListener.java @@ -15,6 +15,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.entity.EntityToggleGlideEvent; import org.bukkit.event.entity.PlayerLeashEntityEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerDropItemEvent; @@ -37,7 +38,7 @@ 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.SQLiteManager.LookupException; +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; @@ -117,6 +118,16 @@ public class PlayerListener implements Listener { } } + @EventHandler(priority = EventPriority.MONITOR) + public void onEntityToggleGlideEvent(EntityToggleGlideEvent e) { + if (e.isCancelled()) { + return; + } + DbEntry entry = new DbEntry(AuxProtect.getLabel(e.getEntity()), EntryAction.ELYTRA, e.isGliding(), + e.getEntity().getLocation(), "", ""); + plugin.dbRunnable.add(entry); + } + @EventHandler(priority = EventPriority.MONITOR) public void onConsume(PlayerItemConsumeEvent e) { if (e.isCancelled()) {