diff --git a/src/me/ryanhamshire/GriefPrevention/Claim.java b/src/me/ryanhamshire/GriefPrevention/Claim.java index 1947663..0ccabb0 100644 --- a/src/me/ryanhamshire/GriefPrevention/Claim.java +++ b/src/me/ryanhamshire/GriefPrevention/Claim.java @@ -902,9 +902,9 @@ public class Claim return chunks; } - public ArrayList getChunkStrings() + ArrayList getChunkHashes() { - ArrayList chunkStrings = new ArrayList(); + ArrayList hashes = new ArrayList(); int smallX = this.getLesserBoundaryCorner().getBlockX() >> 4; int smallZ = this.getLesserBoundaryCorner().getBlockZ() >> 4; int largeX = this.getGreaterBoundaryCorner().getBlockX() >> 4; @@ -914,10 +914,10 @@ public class Claim { for(int z = smallZ; z <= largeZ; z++) { - chunkStrings.add(String.valueOf(x) + z); + hashes.add(DataStore.getChunkHash(x, z)); } } - return chunkStrings; + return hashes; } } diff --git a/src/me/ryanhamshire/GriefPrevention/DataStore.java b/src/me/ryanhamshire/GriefPrevention/DataStore.java index 2b8c663..e18d4a9 100644 --- a/src/me/ryanhamshire/GriefPrevention/DataStore.java +++ b/src/me/ryanhamshire/GriefPrevention/DataStore.java @@ -47,7 +47,7 @@ public abstract class DataStore //in-memory cache for claim data ArrayList claims = new ArrayList(); - ConcurrentHashMap> chunksToClaimsMap = new ConcurrentHashMap>(); + ConcurrentHashMap> chunksToClaimsMap = new ConcurrentHashMap>(); //in-memory cache for messages private String [] messages; @@ -413,14 +413,14 @@ public abstract class DataStore //add it and mark it as added this.claims.add(newClaim); - ArrayList chunkStrings = newClaim.getChunkStrings(); - for(String chunkString : chunkStrings) + ArrayList chunkHashes = newClaim.getChunkHashes(); + for(Long chunkHash : chunkHashes) { - ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkString); + ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkHash); if(claimsInChunk == null) { claimsInChunk = new ArrayList(); - this.chunksToClaimsMap.put(chunkString, claimsInChunk); + this.chunksToClaimsMap.put(chunkHash, claimsInChunk); } claimsInChunk.add(newClaim); @@ -578,10 +578,10 @@ public abstract class DataStore } } - ArrayList chunkStrings = claim.getChunkStrings(); - for(String chunkString : chunkStrings) + ArrayList chunkHashes = claim.getChunkHashes(); + for(Long chunkHash : chunkHashes) { - ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkString); + ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkHash); for(int j = 0; j < claimsInChunk.size(); j++) { if(claimsInChunk.get(j).id.equals(claim.id)) @@ -648,7 +648,7 @@ public abstract class DataStore if(cachedClaim != null && cachedClaim.inDataStore && cachedClaim.contains(location, ignoreHeight, true)) return cachedClaim; //find a top level claim - String chunkID = this.getChunkString(location); + Long chunkID = getChunkHash(location); ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkID); if(claimsInChunk == null) return null; @@ -693,7 +693,7 @@ public abstract class DataStore public Collection getClaims(int chunkx, int chunkz) { - ArrayList chunkClaims = this.chunksToClaimsMap.get(this.getChunkString(chunkx, chunkz)); + ArrayList chunkClaims = this.chunksToClaimsMap.get(getChunkHash(chunkx, chunkz)); if(chunkClaims != null) { return Collections.unmodifiableCollection(chunkClaims); @@ -704,16 +704,16 @@ public abstract class DataStore } } - //gets an almost-unique, persistent identifier string for a chunk - String getChunkString(int chunkx, int chunkz) + //gets an almost-unique, persistent identifier for a chunk + static Long getChunkHash(long chunkx, long chunkz) { - return String.valueOf(chunkx) + (chunkz); + return (chunkz ^ (chunkx << 32)); } - //gets an almost-unique, persistent identifier string for a chunk - String getChunkString(Location location) + //gets an almost-unique, persistent identifier for a chunk + static Long getChunkHash(Location location) { - return this.getChunkString(location.getBlockX() >> 4, location.getBlockZ() >> 4); + return getChunkHash(location.getBlockX() >> 4, location.getBlockZ() >> 4); } //creates a claim. @@ -1732,7 +1732,7 @@ public abstract class DataStore for(int chunk_z = lesserChunk.getZ(); chunk_z <= greaterChunk.getZ(); chunk_z++) { Chunk chunk = location.getWorld().getChunkAt(chunk_x, chunk_z); - String chunkID = this.getChunkString(chunk.getBlock(0, 0, 0).getLocation()); + Long chunkID = getChunkHash(chunk.getBlock(0, 0, 0).getLocation()); ArrayList claimsInChunk = this.chunksToClaimsMap.get(chunkID); if(claimsInChunk != null) {