Fixed a bug with ViaVersion PluginData that caused Database to lock on /plan reload (Related to #347)

This commit is contained in:
Rsl1122 2017-10-08 11:22:47 +03:00
parent 8d8946287c
commit 7af17d6f94
5 changed files with 15 additions and 9 deletions

View File

@ -18,6 +18,7 @@ public abstract class ExecStatement {
public ExecStatement(String sql) {
this.sql = sql;
// Log.debug("Execute Statement: " + sql);
}
public boolean execute(PreparedStatement statement) throws SQLException {

View File

@ -24,6 +24,7 @@ public abstract class QueryStatement<T> {
public QueryStatement(String sql, int fetchSize) {
this.sql = sql;
// Log.debug("Query Statement: " + sql);
this.fetchSize = fetchSize;
}

View File

@ -89,6 +89,7 @@ public abstract class Table {
connection = getConnection();
statement = connection.createStatement();
boolean b = statement.execute(statementString);
// Log.debug("Execute: " + statementString);
commit(connection);
return b;
} finally {

View File

@ -7,6 +7,7 @@ package com.djrapitops.pluginbridge.plan.viaversion;
import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.database.databases.SQLDB;
import main.java.com.djrapitops.plan.systems.processing.Processor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -25,25 +26,23 @@ import java.util.UUID;
*/
public class PlayerVersionListener implements Listener {
private final Plan plan;
private final ViaAPI viaAPI;
private final ProtocolTable table;
private ViaAPI viaAPI;
public PlayerVersionListener(Plan plan, ViaAPI viaAPI, ProtocolTable dbTable) {
this.plan = plan;
public PlayerVersionListener(ViaAPI viaAPI) {
this.viaAPI = viaAPI;
this.table = dbTable;
}
@EventHandler(priority = EventPriority.MONITOR)
public void onJoin(PlayerJoinEvent event) {
UUID uuid = event.getPlayer().getUniqueId();
int playerVersion = viaAPI.getPlayerVersion(uuid);
Plan plan = Plan.getInstance();
plan.addToProcessQueue(new Processor<UUID>(uuid) {
@Override
public void process() {
try {
table.saveProtocolVersion(uuid, playerVersion);
new ProtocolTable((SQLDB) plan.getDB()).saveProtocolVersion(uuid, playerVersion);
} catch (SQLException e) {
Log.toLog(this.getClass().getName() + ":PlanViaVersionJoinListener", e);
}

View File

@ -18,6 +18,8 @@ import us.myles.ViaVersion.api.ViaAPI;
*/
public class ViaVersionHook extends Hook {
private static PlayerVersionListener listener;
/**
* Hooks the plugin and registers it's PluginData objects.
* <p>
@ -43,8 +45,10 @@ public class ViaVersionHook extends Hook {
Log.toLog(this.getClass().getName(), e);
return;
}
PlayerVersionListener l = new PlayerVersionListener(plan, api, table);
plan.registerListener(l);
if (listener == null) {
listener = new PlayerVersionListener(api);
plan.registerListener(listener);
}
addPluginDataSource(new ViaVersionVersionTable(table));
addPluginDataSource(new ViaVersionVersion(table));
}