Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,12 @@ public HashMap<UUID, Integer> 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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down
16 changes: 11 additions & 5 deletions src/main/java/net/crashcraft/crashclaim/data/ClaimDataManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -425,15 +425,21 @@ 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, () -> {
provider.removeSubClaim(subClaim);
});
}

public void loadChunksForClaim(Claim claim){
Expand Down Expand Up @@ -563,7 +569,7 @@ public void preLoadChunk(UUID world, long seed){
}
}

public synchronized void saveClaim(Claim claim){
public void saveClaim(Claim claim){
if (claim.isDeleted()){
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Material, Integer> containerIDMap;
Expand Down Expand Up @@ -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<SubClaim> 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<Integer> list = DB.getFirstColumnResults("SELECT id FROM subclaims WHERE claim_id = ?", claim.getId());
Expand Down Expand Up @@ -376,13 +377,23 @@ private void addContainers(int data_id, int player_id, HashMap<Material, Integer
player_id,
container_id); // Remove old containers as there is no constraint
} else {
DB.executeInsert("INSERT INTO permission_containers(data_id, player_id, container, value) VALUES (?, ?, ?, ?)" +
"ON CONFLICT(data_id, player_id, container) DO UPDATE SET value = ?",
data_id,
player_id,
container_id,
data,
data);
try {
DB.executeInsert("INSERT INTO permission_containers(data_id, player_id, container, value) VALUES (?, ?, ?, ?)" +
"ON CONFLICT(data_id, player_id, container) DO UPDATE SET value = ?",
data_id,
player_id,
container_id,
data,
data);
} catch (SQLException e) {
System.out.printf("INSERT INTO permission_containers(data_id, player_id, container, value) VALUES (%d, %d, %d, %d) ON CONFLICT(data_id, player_id, container) DO UPDATE SET value = %d\n",
data_id,
player_id,
container_id,
data,
data);
throw new RuntimeException(e);
}
}
}
}
Expand Down Expand Up @@ -417,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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
Expand Down