From fa7b3594b4291045af901c116c1263861783f5c1 Mon Sep 17 00:00:00 2001 From: jascotty2 Date: Wed, 25 Sep 2019 07:20:32 -0500 Subject: [PATCH] fix location data bug --- .../songoda/ultimatekits/UltimateKits.java | 5 +++-- .../ultimatekits/commands/CommandSet.java | 11 ++++++---- .../ultimatekits/database/DataManager.java | 22 +++++++++++-------- .../migrations/_2_DuplicateMigration.java | 7 +++++- .../songoda/ultimatekits/kit/KitManager.java | 8 +++---- .../com/songoda/ultimatekits/kit/KitType.java | 16 +++++++++++++- 6 files changed, 48 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/songoda/ultimatekits/UltimateKits.java b/src/main/java/com/songoda/ultimatekits/UltimateKits.java index 2c04ec0..7c60a5a 100644 --- a/src/main/java/com/songoda/ultimatekits/UltimateKits.java +++ b/src/main/java/com/songoda/ultimatekits/UltimateKits.java @@ -256,8 +256,9 @@ public class UltimateKits extends SongodaPlugin { boolean itemOverride = dataFile.getBoolean("BlockData." + key + ".itemOverride"); if (kit == null) dataFile.set("BlockData." + key, null); - else - kitManager.addKitToLocation(kit, location, type, holograms, particles, displayItems, itemOverride); + else { + updateHologram(kitManager.addKitToLocation(kit, location, type, holograms, particles, displayItems, itemOverride)); + } } } diff --git a/src/main/java/com/songoda/ultimatekits/commands/CommandSet.java b/src/main/java/com/songoda/ultimatekits/commands/CommandSet.java index a24f4b5..9cd0287 100644 --- a/src/main/java/com/songoda/ultimatekits/commands/CommandSet.java +++ b/src/main/java/com/songoda/ultimatekits/commands/CommandSet.java @@ -3,6 +3,7 @@ package com.songoda.ultimatekits.commands; import com.songoda.core.commands.AbstractCommand; import com.songoda.ultimatekits.UltimateKits; import com.songoda.ultimatekits.kit.Kit; +import com.songoda.ultimatekits.kit.KitBlockData; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -25,16 +26,18 @@ public class CommandSet extends AbstractCommand { return ReturnType.FAILURE; } Player player = (Player) sender; - String kit = args[0].toLowerCase(); - if (instance.getKitManager().getKit(kit) == null) { + Kit kit = instance.getKitManager().getKit(args[0].toLowerCase()); + if (kit == null) { instance.getLocale().getMessage("command.kit.kitdoesntexist").sendPrefixedMessage(sender); return ReturnType.FAILURE; } Block b = player.getTargetBlock(null, 200); - instance.getKitManager().addKitToLocation(instance.getKitManager().getKit(kit), b.getLocation()); - instance.getLocale().newMessage("&8Kit &a" + kit + " &8set to: &a" + b.getType().toString() + "&8.") + KitBlockData data = instance.getKitManager().addKitToLocation(kit, b.getLocation()); + UltimateKits.getInstance().getDataManager().createBlockData(data); + instance.getLocale().newMessage("&8Kit &a" + kit.getName() + " &8set to: &a" + b.getType().toString() + "&8.") .sendPrefixedMessage(sender); return ReturnType.SUCCESS; + } @Override diff --git a/src/main/java/com/songoda/ultimatekits/database/DataManager.java b/src/main/java/com/songoda/ultimatekits/database/DataManager.java index 52159c9..0996f7c 100644 --- a/src/main/java/com/songoda/ultimatekits/database/DataManager.java +++ b/src/main/java/com/songoda/ultimatekits/database/DataManager.java @@ -3,6 +3,7 @@ package com.songoda.ultimatekits.database; import com.songoda.core.database.DataManagerAbstract; import com.songoda.core.database.DatabaseConnector; import com.songoda.ultimatekits.UltimateKits; +import com.songoda.ultimatekits.kit.Kit; import com.songoda.ultimatekits.kit.KitBlockData; import com.songoda.ultimatekits.kit.KitType; import org.bukkit.Bukkit; @@ -30,7 +31,7 @@ public class DataManager extends DataManagerAbstract { "WHERE world = ? AND x = ? AND y = ? AND z = ?"; try (PreparedStatement statement = connection.prepareStatement(updateData)) { for (KitBlockData data : blockData.values()) { - if (data == null) continue; + if (data == null || data.getWorld() == null) continue; statement.setString(1, data.getType().toString()); statement.setString(2, data.getKit().getName()); statement.setBoolean(3, data.showHologram()); @@ -41,7 +42,6 @@ public class DataManager extends DataManagerAbstract { statement.setInt(8, data.getX()); statement.setInt(9, data.getY()); statement.setInt(10, data.getZ()); - statement.executeUpdate(); statement.addBatch(); } @@ -51,6 +51,7 @@ public class DataManager extends DataManagerAbstract { } public void updateBlockData(KitBlockData blockData) { + if (blockData.getWorld() == null) return; this.async(() -> this.databaseConnector.connect(connection -> { String updateData = "UPDATE " + this.getTablePrefix() + "blockdata SET type = ?, kit = ?, holograms = ?, " + "displayItems = ?, particles = ?, itemOverride = ? " + @@ -72,6 +73,7 @@ public class DataManager extends DataManagerAbstract { } public void createBlockData(KitBlockData blockData) { + if (blockData.getWorld() == null) return; this.async(() -> this.databaseConnector.connect(connection -> { String createData ="INSERT INTO " + this.getTablePrefix() + "blockdata (" + "type, kit, holograms, displayItems, particles, itemOverride, world, x, y, z)" + @@ -113,22 +115,24 @@ public class DataManager extends DataManagerAbstract { try (Statement statement = connection.createStatement()) { ResultSet result = statement.executeQuery(selectData); while (result.next()) { - KitType type = KitType.valueOf(result.getString("type")); - String kit = result.getString("kit"); + + World world = Bukkit.getWorld(result.getString("world")); + if (world == null) continue; + + Kit kit = UltimateKits.getInstance().getKitManager().getKit(result.getString("kit")); + KitType type = KitType.getKitType(result.getString("type")); + if (kit == null || type == null) continue; + boolean holograms = result.getBoolean("holograms"); boolean displayItems = result.getBoolean("displayItems"); boolean particles = result.getBoolean("particles"); boolean itemOverride = result.getBoolean("itemOverride"); - World world = Bukkit.getWorld(result.getString("world")); int x = result.getInt("x"); int y = result.getInt("y"); int z = result.getInt("z"); Location location = new Location(world, x, y, z); - KitBlockData kitBlockData = - new KitBlockData(UltimateKits.getInstance().getKitManager().getKit(kit), - location, type, holograms, particles, displayItems, itemOverride); - blockData.put(location, kitBlockData); + blockData.put(location, new KitBlockData(kit, location, type, holograms, particles, displayItems, itemOverride)); } result.close(); } diff --git a/src/main/java/com/songoda/ultimatekits/database/migrations/_2_DuplicateMigration.java b/src/main/java/com/songoda/ultimatekits/database/migrations/_2_DuplicateMigration.java index 9133935..5c82427 100644 --- a/src/main/java/com/songoda/ultimatekits/database/migrations/_2_DuplicateMigration.java +++ b/src/main/java/com/songoda/ultimatekits/database/migrations/_2_DuplicateMigration.java @@ -65,11 +65,16 @@ public class _2_DuplicateMigration extends DataMigration { statement.setInt(8, blockData.x); statement.setInt(9, blockData.y); statement.setInt(10, blockData.z); - statement.executeUpdate(); + statement.addBatch(); } + statement.executeBatch(); } connection.commit(); connection.setAutoCommit(true); + // free up disk space (sqlite command) + try (Statement statement = connection.createStatement()) { + statement.executeUpdate("VACUUM"); + } } } diff --git a/src/main/java/com/songoda/ultimatekits/kit/KitManager.java b/src/main/java/com/songoda/ultimatekits/kit/KitManager.java index a8c50e9..c6205ac 100644 --- a/src/main/java/com/songoda/ultimatekits/kit/KitManager.java +++ b/src/main/java/com/songoda/ultimatekits/kit/KitManager.java @@ -29,16 +29,16 @@ public final class KitManager { } } - public void addKitToLocation(Kit kit, Location location) { + public KitBlockData addKitToLocation(Kit kit, Location location) { KitBlockData data = new KitBlockData(kit, location); kitsAtLocations.put(roundLocation(location), data); + return data; } - public void addKitToLocation(Kit kit, Location location, KitType type, boolean hologram, boolean particles, boolean items, boolean itemOverride) { + public KitBlockData addKitToLocation(Kit kit, Location location, KitType type, boolean hologram, boolean particles, boolean items, boolean itemOverride) { KitBlockData data = new KitBlockData(kit, location, type, hologram, particles, items, itemOverride); kitsAtLocations.put(roundLocation(location), data); - UltimateKits.getInstance().getDataManager().createBlockData(data); - UltimateKits.getInstance().updateHologram(data); + return data; } public Kit removeKitFromLocation(Location location) { diff --git a/src/main/java/com/songoda/ultimatekits/kit/KitType.java b/src/main/java/com/songoda/ultimatekits/kit/KitType.java index bd1bdd2..54996f6 100644 --- a/src/main/java/com/songoda/ultimatekits/kit/KitType.java +++ b/src/main/java/com/songoda/ultimatekits/kit/KitType.java @@ -1,3 +1,17 @@ package com.songoda.ultimatekits.kit; -public enum KitType {PREVIEW, CRATE, CLAIM} +public enum KitType { + + PREVIEW, CRATE, CLAIM; + + public static KitType getKitType(String search) { + if (search != null) { + for (KitType t : values()) { + if (t.name().equalsIgnoreCase(search)) { + return t; + } + } + } + return null; + } +}