From e91fc20ba525618a75c1f0053db146840a058c26 Mon Sep 17 00:00:00 2001 From: Andersw88 Date: Thu, 29 Jan 2015 15:13:43 +0100 Subject: [PATCH 1/3] fixed bug for negative positions. --- source/Craft.Net.Anvil/World.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/Craft.Net.Anvil/World.cs b/source/Craft.Net.Anvil/World.cs index 63da2d13..ccdd094e 100644 --- a/source/Craft.Net.Anvil/World.cs +++ b/source/Craft.Net.Anvil/World.cs @@ -50,8 +50,8 @@ public Chunk FindChunk(Coordinates3D coordinates) public Chunk GetChunk(Coordinates2D coordinates) { - int regionX = coordinates.X / Region.Width - ((coordinates.X < 0) ? 1 : 0); - int regionZ = coordinates.Z / Region.Depth - ((coordinates.Z < 0) ? 1 : 0); + int regionX = (coordinates.X + ((coordinates.X < 0) ? 1 : 0)) / Region.Width - ((coordinates.X < 0) ? 1 : 0); + int regionZ = (coordinates.Z + ((coordinates.Z < 0) ? 1 : 0)) / Region.Depth - ((coordinates.Z < 0) ? 1 : 0); var region = LoadOrGenerateRegion(new Coordinates2D(regionX, regionZ)); return region.GetChunk(new Coordinates2D(coordinates.X - regionX * 32, coordinates.Z - regionZ * 32)); From 16ad089feeb3fd6754dddf3b4183db942191093e Mon Sep 17 00:00:00 2001 From: Andersw88 Date: Tue, 3 Feb 2015 14:31:58 +0100 Subject: [PATCH 2/3] Added fix to all occurrences in World.cs --- source/Craft.Net.Anvil/World.cs | 40 ++++++++++++++++----------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/source/Craft.Net.Anvil/World.cs b/source/Craft.Net.Anvil/World.cs index ccdd094e..b387a9c1 100644 --- a/source/Craft.Net.Anvil/World.cs +++ b/source/Craft.Net.Anvil/World.cs @@ -29,6 +29,13 @@ public World(string name, IWorldGenerator worldGenerator) : this(name) WorldGenerator = worldGenerator; } + private Coordinates2D chunkCoordinatesToRegion(Coordinates2D coordinates) + { + return new Coordinates2D( + (coordinates.X + ((coordinates.X < 0) ? 1 : 0)) / Region.Width - ((coordinates.X < 0) ? 1 : 0), + (coordinates.Z + ((coordinates.Z < 0) ? 1 : 0)) / Region.Depth - ((coordinates.Z < 0) ? 1 : 0)); + } + public static World LoadWorld(string baseDirectory) { if (!Directory.Exists(baseDirectory)) @@ -50,43 +57,38 @@ public Chunk FindChunk(Coordinates3D coordinates) public Chunk GetChunk(Coordinates2D coordinates) { - int regionX = (coordinates.X + ((coordinates.X < 0) ? 1 : 0)) / Region.Width - ((coordinates.X < 0) ? 1 : 0); - int regionZ = (coordinates.Z + ((coordinates.Z < 0) ? 1 : 0)) / Region.Depth - ((coordinates.Z < 0) ? 1 : 0); + var regionPosition = chunkCoordinatesToRegion(coordinates); - var region = LoadOrGenerateRegion(new Coordinates2D(regionX, regionZ)); - return region.GetChunk(new Coordinates2D(coordinates.X - regionX * 32, coordinates.Z - regionZ * 32)); + var region = LoadOrGenerateRegion(regionPosition); + return region.GetChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); } public void GenerateChunk(Coordinates2D coordinates) { - int regionX = coordinates.X / Region.Width - ((coordinates.X < 0) ? 1 : 0); - int regionZ = coordinates.Z / Region.Depth - ((coordinates.Z < 0) ? 1 : 0); + var regionPosition = chunkCoordinatesToRegion(coordinates); - var region = LoadOrGenerateRegion(new Coordinates2D(regionX, regionZ)); - region.GenerateChunk(new Coordinates2D(coordinates.X - regionX * 32, coordinates.Z - regionZ * 32)); + var region = LoadOrGenerateRegion(regionPosition); + region.GenerateChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); } public Chunk GetChunkWithoutGeneration(Coordinates2D coordinates) { - int regionX = coordinates.X / Region.Width - ((coordinates.X < 0) ? 1 : 0); - int regionZ = coordinates.Z / Region.Depth - ((coordinates.Z < 0) ? 1 : 0); + var regionPosition = chunkCoordinatesToRegion(coordinates); - var regionPosition = new Coordinates2D(regionX, regionZ); if (!Regions.ContainsKey(regionPosition)) return null; return Regions[regionPosition].GetChunkWithoutGeneration( - new Coordinates2D(coordinates.X - regionX * 32, coordinates.Z - regionZ * 32)); + new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); } public void SetChunk(Coordinates2D coordinates, Chunk chunk) { - int regionX = coordinates.X / Region.Width - ((coordinates.X < 0) ? 1 : 0); - int regionZ = coordinates.Z / Region.Depth - ((coordinates.Z < 0) ? 1 : 0); + var regionPosition = chunkCoordinatesToRegion(coordinates); - var region = LoadOrGenerateRegion(new Coordinates2D(regionX, regionZ)); + var region = LoadOrGenerateRegion(regionPosition); lock (region) { chunk.IsModified = true; - region.SetChunk(new Coordinates2D(coordinates.X - regionX * 32, coordinates.Z - regionZ * 32), chunk); + region.SetChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32), chunk); } } @@ -101,13 +103,11 @@ public void UnloadRegion(Coordinates2D coordinates) public void UnloadChunk(Coordinates2D coordinates) { - int regionX = coordinates.X / Region.Width - ((coordinates.X < 0) ? 1 : 0); - int regionZ = coordinates.Z / Region.Depth - ((coordinates.Z < 0) ? 1 : 0); + var regionPosition = chunkCoordinatesToRegion(coordinates); - var regionPosition = new Coordinates2D(regionX, regionZ); if (!Regions.ContainsKey(regionPosition)) throw new ArgumentOutOfRangeException("coordinates"); - Regions[regionPosition].UnloadChunk(new Coordinates2D(coordinates.X - regionX * 32, coordinates.Z - regionZ * 32)); + Regions[regionPosition].UnloadChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); } public short GetBlockId(Coordinates3D coordinates) From 12b43627fbdc584c172d32345295700d60fd4863 Mon Sep 17 00:00:00 2001 From: Andersw88 Date: Tue, 3 Feb 2015 18:42:44 +0100 Subject: [PATCH 3/3] Fixed formatting --- source/Craft.Net.Anvil/World.cs | 38 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/source/Craft.Net.Anvil/World.cs b/source/Craft.Net.Anvil/World.cs index b387a9c1..71fc5eb8 100644 --- a/source/Craft.Net.Anvil/World.cs +++ b/source/Craft.Net.Anvil/World.cs @@ -29,12 +29,12 @@ public World(string name, IWorldGenerator worldGenerator) : this(name) WorldGenerator = worldGenerator; } - private Coordinates2D chunkCoordinatesToRegion(Coordinates2D coordinates) - { - return new Coordinates2D( - (coordinates.X + ((coordinates.X < 0) ? 1 : 0)) / Region.Width - ((coordinates.X < 0) ? 1 : 0), - (coordinates.Z + ((coordinates.Z < 0) ? 1 : 0)) / Region.Depth - ((coordinates.Z < 0) ? 1 : 0)); - } + private Coordinates2D ChunkCoordinatesToRegion(Coordinates2D coordinates) + { + return new Coordinates2D( + (coordinates.X + ((coordinates.X < 0) ? 1 : 0)) / Region.Width - ((coordinates.X < 0) ? 1 : 0), + (coordinates.Z + ((coordinates.Z < 0) ? 1 : 0)) / Region.Depth - ((coordinates.Z < 0) ? 1 : 0)); + } public static World LoadWorld(string baseDirectory) { @@ -57,38 +57,38 @@ public Chunk FindChunk(Coordinates3D coordinates) public Chunk GetChunk(Coordinates2D coordinates) { - var regionPosition = chunkCoordinatesToRegion(coordinates); + var regionPosition = ChunkCoordinatesToRegion(coordinates); - var region = LoadOrGenerateRegion(regionPosition); - return region.GetChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); + var region = LoadOrGenerateRegion(regionPosition); + return region.GetChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); } public void GenerateChunk(Coordinates2D coordinates) { - var regionPosition = chunkCoordinatesToRegion(coordinates); + var regionPosition = ChunkCoordinatesToRegion(coordinates); - var region = LoadOrGenerateRegion(regionPosition); - region.GenerateChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); + var region = LoadOrGenerateRegion(regionPosition); + region.GenerateChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); } public Chunk GetChunkWithoutGeneration(Coordinates2D coordinates) { - var regionPosition = chunkCoordinatesToRegion(coordinates); + var regionPosition = ChunkCoordinatesToRegion(coordinates); if (!Regions.ContainsKey(regionPosition)) return null; return Regions[regionPosition].GetChunkWithoutGeneration( - new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); + new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); } public void SetChunk(Coordinates2D coordinates, Chunk chunk) { - var regionPosition = chunkCoordinatesToRegion(coordinates); + var regionPosition = ChunkCoordinatesToRegion(coordinates); - var region = LoadOrGenerateRegion(regionPosition); + var region = LoadOrGenerateRegion(regionPosition); lock (region) { chunk.IsModified = true; - region.SetChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32), chunk); + region.SetChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32), chunk); } } @@ -103,11 +103,11 @@ public void UnloadRegion(Coordinates2D coordinates) public void UnloadChunk(Coordinates2D coordinates) { - var regionPosition = chunkCoordinatesToRegion(coordinates); + var regionPosition = ChunkCoordinatesToRegion(coordinates); if (!Regions.ContainsKey(regionPosition)) throw new ArgumentOutOfRangeException("coordinates"); - Regions[regionPosition].UnloadChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); + Regions[regionPosition].UnloadChunk(new Coordinates2D(coordinates.X - regionPosition.X * 32, coordinates.Z - regionPosition.Z * 32)); } public short GetBlockId(Coordinates3D coordinates)