mirror of
https://github.com/TotalFreedomMC/TF-ProjectKorra.git
synced 2025-02-11 03:30:10 +00:00
Merge pull request #225 from kingbirdy/fix/database
Change Preset queries to use PreparedStatements
This commit is contained in:
commit
5cf06e6cde
5 changed files with 98 additions and 48 deletions
|
@ -78,6 +78,7 @@ public class AddCommand extends PKCommand {
|
|||
sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is also an " + Character.toString(element.charAt(0)).toUpperCase() + element.substring(1) + "bender.");
|
||||
}
|
||||
}
|
||||
GeneralMethods.saveElements(bPlayer);
|
||||
Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, type, Result.ADD));
|
||||
return;
|
||||
} else {
|
||||
|
|
|
@ -78,9 +78,11 @@ public class PresetCommand extends PKCommand {
|
|||
sender.sendMessage(ChatColor.RED + "You don't have a preset with that name.");
|
||||
return;
|
||||
}
|
||||
|
||||
Preset.bindPreset(player, name);
|
||||
boolean boundAll = Preset.bindPreset(player, name);
|
||||
sender.sendMessage(ChatColor.GREEN + "Your bound slots have been set to match the " + ChatColor.YELLOW + name + ChatColor.GREEN + " preset.");
|
||||
if (!boundAll) {
|
||||
sender.sendMessage(ChatColor.RED + "Some abilities were not bound because you cannot bend the required element.");
|
||||
}
|
||||
return;
|
||||
} else if (Arrays.asList(createaliases).contains(args.get(0)) && hasPermission(sender, "create")) { //bending preset create name
|
||||
int limit = GeneralMethods.getMaxPresets(player);
|
||||
|
|
|
@ -217,17 +217,20 @@ public class WhoCommand extends PKCommand {
|
|||
String element = rs2.getString("element");
|
||||
|
||||
messages.add(playerName + " - ");
|
||||
if (element.contains("a"))
|
||||
messages.add(AirMethods.getAirColor() + "- Airbender");
|
||||
if (element.contains("w"))
|
||||
messages.add(WaterMethods.getWaterColor() + "- Waterbender");
|
||||
if (element.contains("e"))
|
||||
messages.add(EarthMethods.getEarthColor() + "- Earthbender");
|
||||
if (element.contains("f"))
|
||||
messages.add(FireMethods.getFireColor() + "- Firebender");
|
||||
if (element.contains("c"))
|
||||
messages.add(ChiMethods.getChiColor() + "- Chiblocker");
|
||||
|
||||
if (element == null) {
|
||||
messages.add(" - Nonbender");
|
||||
} else {
|
||||
if (element.contains("a"))
|
||||
messages.add(AirMethods.getAirColor() + "- Airbender");
|
||||
if (element.contains("w"))
|
||||
messages.add(WaterMethods.getWaterColor() + "- Waterbender");
|
||||
if (element.contains("e"))
|
||||
messages.add(EarthMethods.getEarthColor() + "- Earthbender");
|
||||
if (element.contains("f"))
|
||||
messages.add(FireMethods.getFireColor() + "- Firebender");
|
||||
if (element.contains("c"))
|
||||
messages.add(ChiMethods.getChiColor() + "- Chiblocker");
|
||||
}
|
||||
if (GeneralMethods.hasRPG()) {
|
||||
if (RPGMethods.isCurrentAvatar(uuid)) {
|
||||
messages.add(GeneralMethods.getAvatarColor() + "Current Avatar");
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.projectkorra.projectkorra.storage.DBConnection;
|
|||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
|
@ -29,6 +30,12 @@ public class Preset {
|
|||
* presets}, keyed to their UUID
|
||||
*/
|
||||
public static ConcurrentHashMap<UUID, List<Preset>> presets = new ConcurrentHashMap<UUID, List<Preset>>();
|
||||
static String loadQuery = "SELECT * FROM pk_presets WHERE uuid = ?";
|
||||
static String loadNameQuery = "SELECT * FROM pk_presets WHERE uuid = ? AND name = ?";
|
||||
static String deleteQuery = "DELETE FROM pk_presets WHERE uuid = ? AND name = ?";
|
||||
static String insertQuery = "INSERT INTO pk_presets (uuid, name) VALUES (?, ?)";
|
||||
static String updateQuery1 = "UPDATE pk_presets SET slot";
|
||||
static String updateQuery2 = " = ? WHERE uuid = ? AND name = ?";
|
||||
|
||||
UUID uuid;
|
||||
HashMap<Integer, String> abilities;
|
||||
|
@ -74,21 +81,23 @@ public class Preset {
|
|||
UUID uuid = player.getUniqueId();
|
||||
if (uuid == null)
|
||||
return;
|
||||
ResultSet rs2 = DBConnection.sql.readQuery("SELECT * FROM pk_presets WHERE uuid = '" + uuid.toString() + "'");
|
||||
try {
|
||||
if (rs2.next()) { // Presets exist.
|
||||
PreparedStatement ps = DBConnection.sql.getConnection().prepareStatement(loadQuery);
|
||||
ps.setString(1, uuid.toString());
|
||||
ResultSet rs = ps.executeQuery();
|
||||
if (rs.next()) { // Presets exist.
|
||||
int i = 0;
|
||||
do {
|
||||
HashMap<Integer, String> moves = new HashMap<Integer, String>();
|
||||
for (int total = 1; total <= 9; total++) {
|
||||
String slot = rs2.getString("slot" + total);
|
||||
String slot = rs.getString("slot" + total);
|
||||
if (slot != null)
|
||||
moves.put(total, slot);
|
||||
}
|
||||
new Preset(uuid, rs2.getString("name"), moves);
|
||||
new Preset(uuid, rs.getString("name"), moves);
|
||||
i++;
|
||||
}
|
||||
while (rs2.next());
|
||||
while (rs.next());
|
||||
ProjectKorra.log.info("Loaded " + i + " presets for " + player.getName());
|
||||
}
|
||||
}
|
||||
|
@ -104,19 +113,33 @@ public class Preset {
|
|||
*
|
||||
* @param player The Player the Preset should be bound for
|
||||
* @param name The name of the Preset that should be bound
|
||||
* @return True if all abilities were successfully bound, or false otherwise
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void bindPreset(Player player, String name) {
|
||||
public static boolean bindPreset(Player player, String name) {
|
||||
BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName());
|
||||
if (bPlayer == null)
|
||||
return;
|
||||
return false;
|
||||
if (!presets.containsKey(player.getUniqueId()))
|
||||
return;
|
||||
return false;
|
||||
HashMap<Integer, String> abilities = null;
|
||||
for (Preset preset : presets.get(player.getUniqueId())) {
|
||||
if (preset.name.equalsIgnoreCase(name)) { // We found it
|
||||
bPlayer.setAbilities((HashMap<Integer, String>) preset.abilities.clone());
|
||||
abilities = (HashMap<Integer, String>) preset.abilities.clone();
|
||||
}
|
||||
}
|
||||
if (abilities == null) {
|
||||
|
||||
}
|
||||
boolean boundAll = true;
|
||||
for (int i = 1; i <= 9; i++) {
|
||||
if (!GeneralMethods.canBend(player.getName(), abilities.get(i))) {
|
||||
abilities.remove(i);
|
||||
boundAll = false;
|
||||
}
|
||||
}
|
||||
bPlayer.setAbilities(abilities);
|
||||
return boundAll;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -177,8 +200,16 @@ public class Preset {
|
|||
* Deletes the Preset from the database.
|
||||
*/
|
||||
public void delete() {
|
||||
DBConnection.sql.modifyQuery("DELETE FROM pk_presets WHERE uuid = '" + uuid.toString() + "' AND name = '" + name + "'");
|
||||
presets.get(uuid).remove(this);
|
||||
try {
|
||||
PreparedStatement ps = DBConnection.sql.getConnection().prepareStatement(deleteQuery);
|
||||
ps.setString(1, uuid.toString());
|
||||
ps.setString(2, name);
|
||||
ps.execute();
|
||||
presets.get(uuid).remove(this);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -194,26 +225,39 @@ public class Preset {
|
|||
* Saves the Preset to the database.
|
||||
*/
|
||||
public void save() {
|
||||
if (ProjectKorra.plugin.getConfig().getString("Storage.engine").equalsIgnoreCase("mysql")) {
|
||||
DBConnection.sql.modifyQuery("INSERT INTO pk_presets (uuid, name) VALUES ('" + uuid.toString() + "', '" + name + "') " + "ON DUPLICATE KEY UPDATE name=VALUES(name)");
|
||||
} else {
|
||||
// DBConnection.sql.modifyQuery("INSERT OR IGNORE INTO pk_presets (uuid, name) VALUES ('" + uuid.toString() + "', '" + name + "')");
|
||||
// DBConnection.sql.modifyQuery("UPDATE pk_presets SET uuid = '" + uuid.toString() + "', name = '" + name + "'");
|
||||
DBConnection.sql.modifyQuery("INSERT OR REPLACE INTO pk_presets (uuid, name) VALUES ('" + uuid.toString() + "', '" + name + "')");
|
||||
}
|
||||
|
||||
/*
|
||||
* Now we know the preset exists in the SQL table, so we can manipulate
|
||||
* it normally.
|
||||
*/
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (Integer i : abilities.keySet()) {
|
||||
DBConnection.sql.modifyQuery("UPDATE pk_presets SET slot" + i + " = '" + abilities.get(i) + "' WHERE uuid = '" + uuid.toString() + "' AND name = '" + name + "'");
|
||||
}
|
||||
try {
|
||||
PreparedStatement ps = DBConnection.sql.getConnection().prepareStatement(loadNameQuery);
|
||||
ps.setString(1, uuid.toString());
|
||||
ps.setString(2, name);
|
||||
ResultSet rs = ps.executeQuery();
|
||||
if (!rs.next()) { //if the preset doesn't exist in the DB, create it
|
||||
ps = DBConnection.sql.getConnection().prepareStatement(insertQuery);
|
||||
ps.setString(1, uuid.toString());
|
||||
ps.setString(2, name);
|
||||
ps.execute();
|
||||
}
|
||||
}.runTaskAsynchronously(ProjectKorra.plugin);
|
||||
}
|
||||
}
|
||||
catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
for (Integer i : abilities.keySet()) {
|
||||
new BukkitRunnable() {
|
||||
PreparedStatement ps;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
ps = DBConnection.sql.getConnection().prepareStatement(updateQuery1 + i + updateQuery2);
|
||||
ps.setString(1, abilities.get(i));
|
||||
ps.setString(2, uuid.toString());
|
||||
ps.setString(3, name);
|
||||
ps.execute();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}.runTaskAsynchronously(ProjectKorra.plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,13 +28,13 @@ public class DBConnection {
|
|||
|
||||
if (!sql.tableExists("pk_players")) {
|
||||
ProjectKorra.log.info("Creating pk_players table");
|
||||
String query = "CREATE TABLE `pk_players` (" + "`id` int(32) NOT NULL AUTO_INCREMENT," + "`uuid` varchar(255)," + "`player` varchar(255)," + "`element` varchar(255)," + "`permaremoved` varchar(5)," + "`slot1` varchar(255)," + "`slot2` varchar(255)," + "`slot3` varchar(255)," + "`slot4` varchar(255)," + "`slot5` varchar(255)," + "`slot6` varchar(255)," + "`slot7` varchar(255)," + "`slot8` varchar(255)," + "`slot9` varchar(255)," + " PRIMARY KEY (id));";
|
||||
String query = "CREATE TABLE `pk_players` (" + "`uuid` varchar(36) NOT NULL," + "`player` varchar(16) NOT NULL," + "`element` varchar(5)," + "`permaremoved` varchar(5)," + "`slot1` varchar(255)," + "`slot2` varchar(255)," + "`slot3` varchar(255)," + "`slot4` varchar(255)," + "`slot5` varchar(255)," + "`slot6` varchar(255)," + "`slot7` varchar(255)," + "`slot8` varchar(255)," + "`slot9` varchar(255)," + " PRIMARY KEY (uuid));";
|
||||
sql.modifyQuery(query);
|
||||
}
|
||||
|
||||
if (!sql.tableExists("pk_presets")) {
|
||||
ProjectKorra.log.info("Creating pk_presets table");
|
||||
String query = "CREATE TABLE `pk_presets` (" + "`id` int(32) NOT NULL AUTO_INCREMENT," + "`uuid` varchar(255)," + "`name` varchar(255)," + "`slot1` varchar(255)," + "`slot2` varchar(255)," + "`slot3` varchar(255)," + "`slot4` varchar(255)," + "`slot5` varchar(255)," + "`slot6` varchar(255)," + "`slot7` varchar(255)," + "`slot8` varchar(255)," + "`slot9` varchar(255)," + " PRIMARY KEY (id));";
|
||||
String query = "CREATE TABLE `pk_presets` (" + "`uuid` varchar(36) NOT NULL," + "`name` varchar(255) NOT NULL," + "`slot1` varchar(255)," + "`slot2` varchar(255)," + "`slot3` varchar(255)," + "`slot4` varchar(255)," + "`slot5` varchar(255)," + "`slot6` varchar(255)," + "`slot7` varchar(255)," + "`slot8` varchar(255)," + "`slot9` varchar(255)," + " PRIMARY KEY (uuid, name));";
|
||||
sql.modifyQuery(query);
|
||||
}
|
||||
} else {
|
||||
|
@ -48,13 +48,13 @@ public class DBConnection {
|
|||
isOpen = true;
|
||||
if (!sql.tableExists("pk_players")) {
|
||||
ProjectKorra.log.info("Creating pk_players table.");
|
||||
String query = "CREATE TABLE `pk_players` (" + "`id` INTEGER PRIMARY KEY," + "`uuid` TEXT(255)," + "`player` TEXT(255)," + "`element` TEXT(255)," + "`permaremoved` TEXT(5)," + "`slot1` TEXT(255)," + "`slot2` TEXT(255)," + "`slot3` TEXT(255)," + "`slot4` TEXT(255)," + "`slot5` TEXT(255)," + "`slot6` TEXT(255)," + "`slot7` TEXT(255)," + "`slot8` TEXT(255)," + "`slot9` TEXT(255));";
|
||||
String query = "CREATE TABLE `pk_players` (" + "`uuid` TEXT(36) PRIMARY KEY," + "`player` TEXT(16)," + "`element` TEXT(255)," + "`permaremoved` TEXT(5)," + "`slot1` TEXT(255)," + "`slot2` TEXT(255)," + "`slot3` TEXT(255)," + "`slot4` TEXT(255)," + "`slot5` TEXT(255)," + "`slot6` TEXT(255)," + "`slot7` TEXT(255)," + "`slot8` TEXT(255)," + "`slot9` TEXT(255));";
|
||||
sql.modifyQuery(query);
|
||||
}
|
||||
|
||||
if (!sql.tableExists("pk_presets")) {
|
||||
ProjectKorra.log.info("Creating pk_presets table");
|
||||
String query = "CREATE TABLE `pk_presets` (" + "`id` INTEGER PRIMARY KEY," + "`uuid` TEXT(255)," + "`name` TEXT(255)," + "`slot1` TEXT(255)," + "`slot2` TEXT(255)," + "`slot3` TEXT(255)," + "`slot4` TEXT(255)," + "`slot5` TEXT(255)," + "`slot6` TEXT(255)," + "`slot7` TEXT(255)," + "`slot8` TEXT(255)," + "`slot9` TEXT(255));";
|
||||
String query = "CREATE TABLE `pk_presets` (" + "`uuid` TEXT(36)," + "`name` TEXT(255)," + "`slot1` TEXT(255)," + "`slot2` TEXT(255)," + "`slot3` TEXT(255)," + "`slot4` TEXT(255)," + "`slot5` TEXT(255)," + "`slot6` TEXT(255)," + "`slot7` TEXT(255)," + "`slot8` TEXT(255)," + "`slot9` TEXT(255)," + "PRIMARY KEY (uuid, name));";
|
||||
sql.modifyQuery(query);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue