forked from Upstream/mmocore
Added an SQL debug option to config.yml
This commit is contained in:
parent
f8b7ac20b3
commit
0662f460f2
@ -136,6 +136,8 @@ public class MMOCore extends JavaPlugin {
|
|||||||
|
|
||||||
public final MMOLoadManager loadManager = new MMOLoadManager();
|
public final MMOLoadManager loadManager = new MMOLoadManager();
|
||||||
|
|
||||||
|
public boolean shouldDebugSQL = false;
|
||||||
|
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
plugin = this;
|
plugin = this;
|
||||||
|
|
||||||
@ -174,6 +176,7 @@ public class MMOCore extends JavaPlugin {
|
|||||||
|
|
||||||
if (getConfig().isConfigurationSection("mysql") && getConfig().getBoolean("mysql.enabled"))
|
if (getConfig().isConfigurationSection("mysql") && getConfig().getBoolean("mysql.enabled"))
|
||||||
dataProvider = new MySQLDataProvider(getConfig());
|
dataProvider = new MySQLDataProvider(getConfig());
|
||||||
|
shouldDebugSQL = getConfig().getBoolean("mysql.debug");
|
||||||
|
|
||||||
if (getConfig().isConfigurationSection("default-playerdata"))
|
if (getConfig().isConfigurationSection("default-playerdata"))
|
||||||
dataProvider.getDataManager().loadDefaultData(getConfig().getConfigurationSection("default-playerdata"));
|
dataProvider.getDataManager().loadDefaultData(getConfig().getConfigurationSection("default-playerdata"));
|
||||||
@ -462,4 +465,9 @@ public class MMOCore extends JavaPlugin {
|
|||||||
public boolean hasEconomy() {
|
public boolean hasEconomy() {
|
||||||
return economy != null && economy.isValid();
|
return economy != null && economy.isValid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void sqlDebug(String s) {
|
||||||
|
if(!MMOCore.plugin.shouldDebugSQL) return;
|
||||||
|
MMOCore.plugin.getLogger().warning("- [SQL Debug] " + s);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,7 @@
|
|||||||
package net.Indyuce.mmocore.manager.data.mysql;
|
package net.Indyuce.mmocore.manager.data.mysql;
|
||||||
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.apache.commons.lang.Validate;
|
|
||||||
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import net.Indyuce.mmocore.MMOCore;
|
import net.Indyuce.mmocore.MMOCore;
|
||||||
import net.Indyuce.mmocore.api.player.OfflinePlayerData;
|
import net.Indyuce.mmocore.api.player.OfflinePlayerData;
|
||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||||
@ -25,6 +11,17 @@ import net.Indyuce.mmocore.api.player.stats.StatType;
|
|||||||
import net.Indyuce.mmocore.manager.data.PlayerDataManager;
|
import net.Indyuce.mmocore.manager.data.PlayerDataManager;
|
||||||
import net.Indyuce.mmocore.manager.data.mysql.MySQLTableEditor.Table;
|
import net.Indyuce.mmocore.manager.data.mysql.MySQLTableEditor.Table;
|
||||||
import net.mmogroup.mmolib.MMOLib;
|
import net.mmogroup.mmolib.MMOLib;
|
||||||
|
import org.apache.commons.lang.Validate;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class MySQLPlayerDataManager extends PlayerDataManager {
|
public class MySQLPlayerDataManager extends PlayerDataManager {
|
||||||
private final MySQLDataProvider provider;
|
private final MySQLDataProvider provider;
|
||||||
@ -35,10 +32,10 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadData(PlayerData data) {
|
public void loadData(PlayerData data) {
|
||||||
|
provider.getResult("SELECT * FROM mmocore_playerdata WHERE uuid = '" + data.getUniqueId() + "';", (result) -> {
|
||||||
try {
|
try {
|
||||||
provider.getResultAsync("SELECT * FROM mmocore_playerdata WHERE uuid = '" + data.getUniqueId() + "';",
|
MMOCore.sqlDebug("Loading data for: '" + data.getUniqueId() + "'...");
|
||||||
(result) -> {
|
|
||||||
try {
|
|
||||||
if (!result.first()) {
|
if (!result.first()) {
|
||||||
data.setLevel(getDefaultData().getLevel());
|
data.setLevel(getDefaultData().getLevel());
|
||||||
data.setClassPoints(getDefaultData().getClassPoints());
|
data.setClassPoints(getDefaultData().getClassPoints());
|
||||||
@ -51,6 +48,8 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
|
|||||||
data.setStellium(data.getStats().getStat(StatType.MAX_STELLIUM));
|
data.setStellium(data.getStats().getStat(StatType.MAX_STELLIUM));
|
||||||
data.getQuestData().updateBossBar();
|
data.getQuestData().updateBossBar();
|
||||||
|
|
||||||
|
data.setFullyLoaded();
|
||||||
|
MMOCore.sqlDebug("Loaded DEFAULT data for: '" + data.getUniqueId() + "' as no saved data was found.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,23 +65,18 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
|
|||||||
data.setStamina(data.getStats().getStat(StatType.MAX_STAMINA));
|
data.setStamina(data.getStats().getStat(StatType.MAX_STAMINA));
|
||||||
data.setStellium(data.getStats().getStat(StatType.MAX_STELLIUM));
|
data.setStellium(data.getStats().getStat(StatType.MAX_STELLIUM));
|
||||||
if (!isEmpty(result.getString("guild")))
|
if (!isEmpty(result.getString("guild")))
|
||||||
data.setGuild(MMOCore.plugin.dataProvider.getGuildManager()
|
data.setGuild(MMOCore.plugin.dataProvider.getGuildManager().stillInGuild(data.getUniqueId(), result.getString("guild")));
|
||||||
.stillInGuild(data.getUniqueId(), result.getString("guild")));
|
if (!isEmpty(result.getString("attributes"))) data.getAttributes().load(result.getString("attributes"));
|
||||||
if (!isEmpty(result.getString("attributes")))
|
|
||||||
data.getAttributes().load(result.getString("attributes"));
|
|
||||||
if (!isEmpty(result.getString("professions")))
|
if (!isEmpty(result.getString("professions")))
|
||||||
data.getCollectionSkills().load(result.getString("professions"));
|
data.getCollectionSkills().load(result.getString("professions"));
|
||||||
if (!isEmpty(result.getString("quests")))
|
if (!isEmpty(result.getString("quests"))) data.getQuestData().load(result.getString("quests"));
|
||||||
data.getQuestData().load(result.getString("quests"));
|
|
||||||
data.getQuestData().updateBossBar();
|
data.getQuestData().updateBossBar();
|
||||||
if (!isEmpty(result.getString("waypoints")))
|
if (!isEmpty(result.getString("waypoints")))
|
||||||
data.getWaypoints().addAll(getJSONArray(result.getString("waypoints")));
|
data.getWaypoints().addAll(getJSONArray(result.getString("waypoints")));
|
||||||
if (!isEmpty(result.getString("friends")))
|
if (!isEmpty(result.getString("friends")))
|
||||||
getJSONArray(result.getString("friends"))
|
getJSONArray(result.getString("friends")).forEach(str -> data.getFriends().add(UUID.fromString(str)));
|
||||||
.forEach(str -> data.getFriends().add(UUID.fromString(str)));
|
|
||||||
if (!isEmpty(result.getString("skills"))) {
|
if (!isEmpty(result.getString("skills"))) {
|
||||||
JsonObject object = MMOLib.plugin.getJson().parse(result.getString("skills"),
|
JsonObject object = MMOLib.plugin.getJson().parse(result.getString("skills"), JsonObject.class);
|
||||||
JsonObject.class);
|
|
||||||
for (Entry<String, JsonElement> entry : object.entrySet())
|
for (Entry<String, JsonElement> entry : object.entrySet())
|
||||||
data.setSkillLevel(entry.getKey(), entry.getValue().getAsInt());
|
data.setSkillLevel(entry.getKey(), entry.getValue().getAsInt());
|
||||||
}
|
}
|
||||||
@ -91,38 +85,35 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
|
|||||||
if (data.getProfess().hasSkill(skill))
|
if (data.getProfess().hasSkill(skill))
|
||||||
data.getBoundSkills().add(data.getProfess().getSkill(skill));
|
data.getBoundSkills().add(data.getProfess().getSkill(skill));
|
||||||
if (!isEmpty(result.getString("class_info"))) {
|
if (!isEmpty(result.getString("class_info"))) {
|
||||||
JsonObject object = MMOLib.plugin.getJson().parse(result.getString("class_info"),
|
JsonObject object = MMOLib.plugin.getJson().parse(result.getString("class_info"), JsonObject.class);
|
||||||
JsonObject.class);
|
|
||||||
for (Entry<String, JsonElement> entry : object.entrySet()) {
|
for (Entry<String, JsonElement> entry : object.entrySet()) {
|
||||||
try {
|
try {
|
||||||
PlayerClass profess = MMOCore.plugin.classManager.get(entry.getKey());
|
PlayerClass profess = MMOCore.plugin.classManager.get(entry.getKey());
|
||||||
Validate.notNull(profess, "Could not find class '" + entry.getKey() + "'");
|
Validate.notNull(profess, "Could not find class '" + entry.getKey() + "'");
|
||||||
data.applyClassInfo(profess,
|
data.applyClassInfo(profess, new SavedClassInformation(entry.getValue().getAsJsonObject()));
|
||||||
new SavedClassInformation(entry.getValue().getAsJsonObject()));
|
|
||||||
} catch (IllegalArgumentException exception) {
|
} catch (IllegalArgumentException exception) {
|
||||||
MMOCore.log(Level.WARNING, "Could not load class info '" + entry.getKey()
|
MMOCore.log(Level.WARNING, "Could not load class info '" + entry.getKey() + "': " + exception.getMessage());
|
||||||
+ "': " + exception.getMessage());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data.setFullyLoaded();
|
|
||||||
} catch (SQLException e) {
|
data.setFullyLoaded();
|
||||||
e.printStackTrace();
|
MMOCore.sqlDebug("Loaded saved data for: '" + data.getUniqueId() + "'!");
|
||||||
}
|
MMOCore.sqlDebug(String.format("{ class: %s, level: %d }", data.getProfess().getId(), data.getLevel()));
|
||||||
}).get();
|
} catch (SQLException e) {
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
e.printStackTrace();
|
||||||
e.printStackTrace();
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isEmpty(String s) {
|
private boolean isEmpty(String s) {
|
||||||
return s == null || s.equalsIgnoreCase("null") || s.equalsIgnoreCase("{}") || s.equalsIgnoreCase("[]")
|
return s == null || s.equalsIgnoreCase("null") || s.equalsIgnoreCase("{}") || s.equalsIgnoreCase("[]") || s.equalsIgnoreCase("");
|
||||||
|| s.equalsIgnoreCase("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveData(PlayerData data) {
|
public void saveData(PlayerData data) {
|
||||||
MySQLTableEditor sql = new MySQLTableEditor(Table.PLAYERDATA, data.getUniqueId());
|
MySQLTableEditor sql = new MySQLTableEditor(Table.PLAYERDATA, data.getUniqueId());
|
||||||
|
MMOCore.sqlDebug("Saving data for: '" + data.getUniqueId() + "'...");
|
||||||
|
|
||||||
sql.updateData("class_points", data.getClassPoints());
|
sql.updateData("class_points", data.getClassPoints());
|
||||||
sql.updateData("skill_points", data.getSkillPoints());
|
sql.updateData("skill_points", data.getSkillPoints());
|
||||||
@ -135,10 +126,8 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
|
|||||||
sql.updateData("guild", data.hasGuild() ? data.getGuild().getId() : null);
|
sql.updateData("guild", data.hasGuild() ? data.getGuild().getId() : null);
|
||||||
|
|
||||||
sql.updateJSONArray("waypoints", data.getWaypoints());
|
sql.updateJSONArray("waypoints", data.getWaypoints());
|
||||||
sql.updateJSONArray("friends",
|
sql.updateJSONArray("friends", data.getFriends().stream().map(UUID::toString).collect(Collectors.toList()));
|
||||||
data.getFriends().stream().map(UUID::toString).collect(Collectors.toList()));
|
sql.updateJSONArray("bound_skills", data.getBoundSkills().stream().map(skill -> skill.getSkill().getId()).collect(Collectors.toList()));
|
||||||
sql.updateJSONArray("bound_skills",
|
|
||||||
data.getBoundSkills().stream().map(skill -> skill.getSkill().getId()).collect(Collectors.toList()));
|
|
||||||
|
|
||||||
sql.updateJSONObject("skills", data.mapSkillLevels().entrySet());
|
sql.updateJSONObject("skills", data.mapSkillLevels().entrySet());
|
||||||
|
|
||||||
@ -147,6 +136,9 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
|
|||||||
sql.updateData("quests", data.getQuestData().toJsonString());
|
sql.updateData("quests", data.getQuestData().toJsonString());
|
||||||
|
|
||||||
sql.updateData("class_info", createClassInfoData(data).toString());
|
sql.updateData("class_info", createClassInfoData(data).toString());
|
||||||
|
|
||||||
|
MMOCore.sqlDebug("Saved data for: " + data.getUniqueId());
|
||||||
|
MMOCore.sqlDebug(String.format("{ class: %s, level: %d }", data.getProfess().getId(), data.getLevel()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private JsonObject createClassInfoData(PlayerData data) {
|
private JsonObject createClassInfoData(PlayerData data) {
|
||||||
@ -192,39 +184,34 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
|
|||||||
public MySQLOfflinePlayerData(UUID uuid) {
|
public MySQLOfflinePlayerData(UUID uuid) {
|
||||||
super(uuid);
|
super(uuid);
|
||||||
|
|
||||||
|
provider.getResult("SELECT * FROM mmocore_playerdata WHERE uuid = '" + uuid + "';", (result) -> {
|
||||||
try {
|
try {
|
||||||
provider.getResultAsync("SELECT * FROM mmocore_playerdata WHERE uuid = '" + uuid + "';", (result) -> {
|
MMOCore.sqlDebug("Loading OFFLINE data for '" + uuid + "'.");
|
||||||
try {
|
|
||||||
if (!result.first()) {
|
if (!result.first()) {
|
||||||
level = 0;
|
level = 0;
|
||||||
lastLogin = 0;
|
lastLogin = 0;
|
||||||
profess = MMOCore.plugin.classManager.getDefaultClass();
|
profess = MMOCore.plugin.classManager.getDefaultClass();
|
||||||
friends = new ArrayList<>();
|
friends = new ArrayList<>();
|
||||||
|
MMOCore.sqlDebug("Default OFFLINE data loaded.");
|
||||||
} else {
|
} else {
|
||||||
level = result.getInt("level");
|
level = result.getInt("level");
|
||||||
lastLogin = result.getLong("last_login");
|
lastLogin = result.getLong("last_login");
|
||||||
profess = isEmpty(result.getString("class")) ? MMOCore.plugin.classManager.getDefaultClass()
|
profess = isEmpty(result.getString("class")) ? MMOCore.plugin.classManager.getDefaultClass() : MMOCore.plugin.classManager.get(result.getString("class"));
|
||||||
: MMOCore.plugin.classManager.get(result.getString("class"));
|
|
||||||
if (!isEmpty(result.getString("friends")))
|
if (!isEmpty(result.getString("friends")))
|
||||||
getJSONArray(result.getString("friends"))
|
getJSONArray(result.getString("friends")).forEach(str -> friends.add(UUID.fromString(str)));
|
||||||
.forEach(str -> friends.add(UUID.fromString(str)));
|
else friends = new ArrayList<>();
|
||||||
else
|
MMOCore.sqlDebug("Saved OFFLINE data loaded.");
|
||||||
friends = new ArrayList<>();
|
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}).get();
|
});
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeFriend(UUID uuid) {
|
public void removeFriend(UUID uuid) {
|
||||||
friends.remove(uuid);
|
friends.remove(uuid);
|
||||||
new MySQLTableEditor(Table.PLAYERDATA, uuid).updateDataAsync("friends",
|
new MySQLTableEditor(Table.PLAYERDATA, uuid).updateData("friends", friends.stream().map(UUID::toString).collect(Collectors.toList()));
|
||||||
friends.stream().map(UUID::toString).collect(Collectors.toList()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -250,7 +237,7 @@ public class MySQLPlayerDataManager extends PlayerDataManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(PlayerData data) {
|
public void remove(PlayerData data) {
|
||||||
if(data.isFullyLoaded()) saveData(data);
|
if (data.isFullyLoaded()) saveData(data);
|
||||||
remove(data.getUniqueId());
|
remove(data.getUniqueId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@ import java.util.Collection;
|
|||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
|
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
@ -25,15 +24,6 @@ public class MySQLTableEditor {
|
|||||||
+ ") VALUES('" + uuid + "', '" + value + "') ON DUPLICATE KEY UPDATE " + key + "='" + value + "';");
|
+ ") VALUES('" + uuid + "', '" + value + "') ON DUPLICATE KEY UPDATE " + key + "='" + value + "';");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateDataAsync(String key, Object value) {
|
|
||||||
try {
|
|
||||||
((MySQLDataProvider) MMOCore.plugin.dataProvider).executeUpdateAsync("INSERT INTO " + table + "(uuid, " + key
|
|
||||||
+ ") VALUES('" + uuid + "', '" + value + "') ON DUPLICATE KEY UPDATE " + key + "='" + value + "';").get();
|
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateJSONArray(String key, Collection<String> collection) {
|
public void updateJSONArray(String key, Collection<String> collection) {
|
||||||
JsonArray json = new JsonArray();
|
JsonArray json = new JsonArray();
|
||||||
for (String s : collection)
|
for (String s : collection)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
# a Spigot Plugin by Team Requiem
|
# a Spigot Plugin by Team Requiem
|
||||||
|
|
||||||
# DO NOT TOUCH
|
# DO NOT TOUCH
|
||||||
config-version: 4
|
config-version: 5
|
||||||
|
|
||||||
# Auto-Save feature automatically saves playerdata
|
# Auto-Save feature automatically saves playerdata
|
||||||
# (class, level, etc.) and guild data
|
# (class, level, etc.) and guild data
|
||||||
@ -29,6 +29,9 @@ mysql:
|
|||||||
cachePrepStmts: true
|
cachePrepStmts: true
|
||||||
prepStmtCacheSize: 250
|
prepStmtCacheSize: 250
|
||||||
prepStmtCacheSqlLimit: 2048
|
prepStmtCacheSqlLimit: 2048
|
||||||
|
# Will verbose to the console whenever
|
||||||
|
# data is saved/loaded from the SQL database.
|
||||||
|
debug: false
|
||||||
|
|
||||||
# The default values for all playerdata
|
# The default values for all playerdata
|
||||||
# All new players will start with these values
|
# All new players will start with these values
|
||||||
|
Loading…
Reference in New Issue
Block a user