Fixed claims with subdivisions living on as ghosts.

Claims like this, when deleted, would still protect the area for any
players who have that claim cached.  This change seems to have fixed the
issue.
This commit is contained in:
ryanhamshire 2014-11-05 16:27:06 -08:00
parent c755926e40
commit 4c6b215407

View File

@ -466,44 +466,49 @@ public abstract class DataStore
//deletes a claim or subdivision
synchronized public void deleteClaim(Claim claim)
{
//subdivisions are simple - just remove them from their parent claim and save that claim
//subdivisions are simple - just remove them from their parent claim and save that claim
if(claim.parent != null)
{
Claim parentClaim = claim.parent;
parentClaim.children.remove(claim);
this.saveClaim(parentClaim);
claim.inDataStore = false;
this.saveClaim(parentClaim);
return;
}
//delete any children
for(int j = 0; j < claim.children.size(); j++)
{
this.deleteClaim(claim.children.get(j));
}
//mark as deleted so any references elsewhere can be ignored
claim.inDataStore = false;
//remove from memory
for(int i = 0; i < this.claims.size(); i++)
{
if(claims.get(i).id.equals(claim.id))
{
this.claims.remove(i);
claim.inDataStore = false;
for(int j = 0; j < claim.children.size(); j++)
{
claim.children.get(j).inDataStore = false;
}
break;
}
ArrayList<String> chunkStrings = claim.getChunkStrings();
for(String chunkString : chunkStrings)
{
ArrayList<Claim> claimsInChunk = this.chunksToClaimsMap.get(chunkString);
for(int j = 0; j < claimsInChunk.size(); j++)
{
if(claimsInChunk.get(j).id.equals(claim.id))
{
claimsInChunk.remove(j);
break;
}
}
}
}
ArrayList<String> chunkStrings = claim.getChunkStrings();
for(String chunkString : chunkStrings)
{
ArrayList<Claim> claimsInChunk = this.chunksToClaimsMap.get(chunkString);
for(int j = 0; j < claimsInChunk.size(); j++)
{
if(claimsInChunk.get(j).id.equals(claim.id))
{
claimsInChunk.remove(j);
break;
}
}
}
//remove from secondary storage
this.deleteClaimFromSecondaryStorage(claim);