From 00701e1a21a72f1a404cb4b9ddfb059268b20af8 Mon Sep 17 00:00:00 2001 From: Nikolai Connolly Date: Thu, 22 Feb 2024 14:16:18 -0600 Subject: [PATCH 1/4] test --- .../crashcraft/crashclaim/claimobjects/Claim.java | 4 ++-- .../commands/claiming/UnClaimCommand.java | 10 +++++----- .../crashclaim/data/ClaimDataManager.java | 14 +++++++++----- .../net/crashcraft/crashclaim/menus/ClaimMenu.java | 2 +- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/crashcraft/crashclaim/claimobjects/Claim.java b/src/main/java/net/crashcraft/crashclaim/claimobjects/Claim.java index 13db9bc..b16a062 100644 --- a/src/main/java/net/crashcraft/crashclaim/claimobjects/Claim.java +++ b/src/main/java/net/crashcraft/crashclaim/claimobjects/Claim.java @@ -137,12 +137,12 @@ public HashMap getContribution(){ } @Override - public synchronized boolean isToSave() { + public boolean isToSave() { return toSave; } @Override - public synchronized void setToSave(boolean toSave) { + public void setToSave(boolean toSave) { this.toSave = toSave; } diff --git a/src/main/java/net/crashcraft/crashclaim/commands/claiming/UnClaimCommand.java b/src/main/java/net/crashcraft/crashclaim/commands/claiming/UnClaimCommand.java index d8295d7..9bd0923 100644 --- a/src/main/java/net/crashcraft/crashclaim/commands/claiming/UnClaimCommand.java +++ b/src/main/java/net/crashcraft/crashclaim/commands/claiming/UnClaimCommand.java @@ -60,7 +60,7 @@ public void unClaim(Player player){ } } - CrashClaim.getPlugin().getDataManager().deleteClaim(claim); + CrashClaim.getPlugin().getDataManager().deleteClaimAsync(claim); VisualGroup group = visualizationManager.fetchVisualGroup(player, false); if (group != null){ group.removeAllVisuals(); @@ -102,7 +102,7 @@ public void unClaimAll(Player player){ } } - CrashClaim.getPlugin().getDataManager().deleteClaim(claim); + CrashClaim.getPlugin().getDataManager().deleteClaimAsync(claim); VisualGroup group = visualizationManager.fetchVisualGroup(player, false); if (group != null) { group.removeAllVisuals(); @@ -132,14 +132,14 @@ public void unClaimAll(Player player, @Flags("other") OfflinePlayer otherPlayer) for (Claim claim : claims) { // Admin Command no need for permission checks - CrashClaim.getPlugin().getDataManager().deleteClaim(claim); + CrashClaim.getPlugin().getDataManager().deleteClaimAsync(claim); VisualGroup group = visualizationManager.fetchVisualGroup(player, false); if (group != null) { group.removeAllVisuals(); } - if (otherPlayer.isOnline()){ - CrashClaim.getPlugin().getDataManager().deleteClaim(claim); + if (otherPlayer.isOnline()) { + CrashClaim.getPlugin().getDataManager().deleteClaimAsync(claim); VisualGroup group2 = visualizationManager.fetchVisualGroup(otherPlayer.getPlayer(), false); if (group2 != null) { group2.removeAllVisuals(); diff --git a/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java b/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java index 11c3461..b240f22 100644 --- a/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java +++ b/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java @@ -393,7 +393,7 @@ private boolean addClaim(Claim claim){ //Should not be called from anywhere else return true; } - public synchronized void deleteClaim(Claim claim){ + public void deleteClaim(Claim claim){ if (claim.isDeleted()){ return; } @@ -425,15 +425,19 @@ public synchronized void deleteClaim(Claim claim){ } } - public synchronized void deleteSubClaimWithoutSave(SubClaim subClaim){ + public void deleteClaimAsync(Claim claim) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> deleteClaim(claim)); + } + + public void deleteSubClaimWithoutSave(SubClaim subClaim){ Claim parent = subClaim.getParent(); parent.removeSubClaim(subClaim.getId()); } - public synchronized void deleteSubClaim(SubClaim subClaim){ + public void deleteSubClaim(SubClaim subClaim){ Claim parent = subClaim.getParent(); parent.removeSubClaim(subClaim.getId()); - saveClaim(parent); + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> saveClaim(parent)); } public void loadChunksForClaim(Claim claim){ @@ -563,7 +567,7 @@ public void preLoadChunk(UUID world, long seed){ } } - public synchronized void saveClaim(Claim claim){ + public void saveClaim(Claim claim){ if (claim.isDeleted()){ return; } diff --git a/src/main/java/net/crashcraft/crashclaim/menus/ClaimMenu.java b/src/main/java/net/crashcraft/crashclaim/menus/ClaimMenu.java index 1a2ae9d..df99664 100644 --- a/src/main/java/net/crashcraft/crashclaim/menus/ClaimMenu.java +++ b/src/main/java/net/crashcraft/crashclaim/menus/ClaimMenu.java @@ -201,7 +201,7 @@ public void onClick(InventoryClickEvent event, String rawItemName) { (player, aBoolean) -> { if (aBoolean) { if (helper.hasPermission(claim, getPlayer().getUniqueId(), PermissionRoute.MODIFY_PERMISSIONS)) { - CrashClaim.getPlugin().getDataManager().deleteClaim(claim); + CrashClaim.getPlugin().getDataManager().deleteClaimAsync(claim); } else { player.spigot().sendMessage(Localization.MENU__GENERAL__INSUFFICIENT_PERMISSION.getMessage(player)); } From 5788aa27ef48b88406b75676618c9406eb0a1a96 Mon Sep 17 00:00:00 2001 From: Nikolai Connolly Date: Thu, 22 Feb 2024 16:51:23 -0600 Subject: [PATCH 2/4] t --- build.gradle.kts | 2 +- .../providers/sqlite/SQLiteDataProvider.java | 101 ++++++++++-------- 2 files changed, 57 insertions(+), 46 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7ad14c8..4a5d059 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -49,7 +49,7 @@ dependencies { implementation("io.papermc:paperlib:1.0.7") implementation("co.aikar:idb-core:1.0.0-SNAPSHOT") implementation("com.zaxxer:HikariCP:5.1.0") - implementation("com.github.retrooper.packetevents:spigot:2.2.0") + implementation("com.github.retrooper.packetevents:spigot:2.2.1") compileOnly("com.github.N0RSKA:DeluxeSellwandsAPI:32c") compileOnly("com.ghostchu:quickshop-api:5.2.0.8") compileOnly("com.google.guava:guava:33.0.0-jre") diff --git a/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java b/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java index cbf4c5f..42c9d84 100644 --- a/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java +++ b/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java @@ -28,12 +28,7 @@ import java.io.File; import java.sql.SQLException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; +import java.util.*; public class SQLiteDataProvider implements DataProvider { private BiMap containerIDMap; @@ -241,39 +236,45 @@ public void saveClaim(Claim claim) { savePermissions(claimData_id, claim.getPerms()); //Sub Claim - for (SubClaim subClaim : claim.getSubClaims()) { - Integer subClaimData_id = DB.getFirstColumn("SELECT data FROM subclaims WHERE subclaims.id = ?", subClaim.getId()); - - if (subClaimData_id == null){ - subClaimData_id = -1; + Iterator iterator = new ArrayList<>(claim.getSubClaims()).iterator(); + iterator.forEachRemaining(subClaim -> { + try { + Integer subClaimData_id = DB.getFirstColumn("SELECT data FROM subclaims WHERE subclaims.id = ?", subClaim.getId()); + + if (subClaimData_id == null){ + subClaimData_id = -1; + } + + addClaimData( + subClaimData_id, + subClaim.getMinX(), + subClaim.getMinZ(), + subClaim.getMaxX(), + subClaim.getMaxZ(), + subClaim.getWorld(), + subClaim.getName(), + subClaim.getEntryMessage(), + subClaim.getExitMessage(), + DataType.SUB_CLAIM + ); + + DB.executeUpdate("INSERT OR IGNORE INTO subclaims(id, data, claim_id) VALUES (?, " + + "(SELECT id FROM claim_data WHERE minX = ? AND minZ = ? AND maxX = ? AND maxZ = ? AND world = (SELECT id FROM claimworlds WHERE uuid = ?))," + + "?)", + subClaim.getId(), + subClaim.getMinX(), subClaim.getMinZ(), subClaim.getMaxX(), subClaim.getMaxZ(), subClaim.getWorld().toString(), + subClaim.getParent().getId() + ); + + if (subClaimData_id == -1) { + subClaimData_id = DB.getFirstColumn("SELECT data FROM subclaims WHERE subclaims.id = ?", subClaim.getId()); + } + + savePermissions(subClaimData_id, subClaim.getPerms()); + } catch (SQLException e) { + throw new RuntimeException(e); } - - addClaimData( - subClaimData_id, - subClaim.getMinX(), - subClaim.getMinZ(), - subClaim.getMaxX(), - subClaim.getMaxZ(), - subClaim.getWorld(), - subClaim.getName(), - subClaim.getEntryMessage(), - subClaim.getExitMessage(), - DataType.SUB_CLAIM - ); - - DB.executeUpdate("INSERT OR IGNORE INTO subclaims(id, data, claim_id) VALUES (?, " + - "(SELECT id FROM claim_data WHERE minX = ? AND minZ = ? AND maxX = ? AND maxZ = ? AND world = (SELECT id FROM claimworlds WHERE uuid = ?))," + - "?)", - subClaim.getId(), - subClaim.getMinX(), subClaim.getMinZ(), subClaim.getMaxX(), subClaim.getMaxZ(), subClaim.getWorld().toString(), - subClaim.getParent().getId() - ); - - if (subClaimData_id == -1) { - subClaimData_id = DB.getFirstColumn("SELECT data FROM subclaims WHERE subclaims.id = ?", subClaim.getId()); - } - savePermissions(subClaimData_id, subClaim.getPerms()); - } + }); //Fetch and delete outdated subClaims List list = DB.getFirstColumnResults("SELECT id FROM subclaims WHERE claim_id = ?", claim.getId()); @@ -376,13 +377,23 @@ private void addContainers(int data_id, int player_id, HashMap Date: Thu, 22 Feb 2024 16:54:55 -0600 Subject: [PATCH 3/4] todo --- .../net/crashcraft/crashclaim/data/ClaimDataManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java b/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java index b240f22..975b400 100644 --- a/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java +++ b/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java @@ -437,7 +437,10 @@ public void deleteSubClaimWithoutSave(SubClaim subClaim){ public void deleteSubClaim(SubClaim subClaim){ Claim parent = subClaim.getParent(); parent.removeSubClaim(subClaim.getId()); - Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> saveClaim(parent)); + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + saveClaim(parent); + //TODO: dont resave entire claim, just delete the subclaim directly + }); } public void loadChunksForClaim(Claim claim){ From bbc7e87563aabdc6a845c78141eb0e660f3751a4 Mon Sep 17 00:00:00 2001 From: Nikolai Connolly Date: Thu, 22 Feb 2024 17:04:45 -0600 Subject: [PATCH 4/4] delete subclaim directly --- .../net/crashcraft/crashclaim/data/ClaimDataManager.java | 3 +-- .../crashclaim/data/providers/DataProvider.java | 5 +++++ .../data/providers/sqlite/SQLiteDataProvider.java | 9 +++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java b/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java index 975b400..8035a6f 100644 --- a/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java +++ b/src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java @@ -438,8 +438,7 @@ public void deleteSubClaim(SubClaim subClaim){ Claim parent = subClaim.getParent(); parent.removeSubClaim(subClaim.getId()); Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { - saveClaim(parent); - //TODO: dont resave entire claim, just delete the subclaim directly + provider.removeSubClaim(subClaim); }); } diff --git a/src/main/java/net/crashcraft/crashclaim/data/providers/DataProvider.java b/src/main/java/net/crashcraft/crashclaim/data/providers/DataProvider.java index 77af873..df9cf49 100644 --- a/src/main/java/net/crashcraft/crashclaim/data/providers/DataProvider.java +++ b/src/main/java/net/crashcraft/crashclaim/data/providers/DataProvider.java @@ -25,6 +25,11 @@ public interface DataProvider extends Listener { */ void removeClaim(Claim claim); + /** + * Removes a subclaim and all data + **/ + void removeSubClaim(SubClaim claim); + /** * Loads a claim into memory from the datasource * @return A loaded claim object diff --git a/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java b/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java index 42c9d84..7e33f23 100644 --- a/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java +++ b/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java @@ -428,6 +428,15 @@ public void removeClaim(Claim claim) { } } + @Override + public void removeSubClaim(SubClaim claim) { + try { + DB.executeUpdate("DELETE FROM claim_data WHERE id = (SELECT data FROM subclaims WHERE subclaims.id = ?)", claim.getId()); + } catch (SQLException e){ + e.printStackTrace(); + } + } + @Override public Claim loadClaim(Integer id) { try {