From: Irtimaled Date: Thu, 5 Feb 2015 10:47:39 +0000 (+0000) Subject: Fix #1 X-Git-Tag: 1.0.0-beta6~2 X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=54c9dc4e5b5a1f4c0e58638182b170cceb12c541;p=BoundingBoxOutlineReloaded.git Fix #1 Need to use the value sent from the server/loaded from level.dat as this won't change. Also cached the world spawn and spawn chunk bounding boxes as these don't change! --- diff --git a/java/com/irtimaled/bbor/ClientProxy.java b/java/com/irtimaled/bbor/ClientProxy.java index fdc2ce4..bb4146f 100644 --- a/java/com/irtimaled/bbor/ClientProxy.java +++ b/java/com/irtimaled/bbor/ClientProxy.java @@ -39,6 +39,8 @@ public class ClientProxy extends CommonProxy { private double playerX; private double playerY; private double playerZ; + private BoundingBox worldSpawnBoundingBox; + private BoundingBox spawnChunksBoundingBox; @SubscribeEvent public void onKeyInputEvent(InputEvent.KeyInputEvent evt) { @@ -67,6 +69,13 @@ public class ClientProxy extends CommonProxy { return true; } + @Override + public void setWorldData(long seed, int spawnX, int spawnZ) { + worldSpawnBoundingBox = null; + spawnChunksBoundingBox = null; + super.setWorldData(seed, spawnX, spawnZ); + } + @SubscribeEvent public void renderWorldLastEvent(RenderWorldLastEvent event) { EntityPlayer entityPlayer = Minecraft.getMinecraft().thePlayer; @@ -233,6 +242,8 @@ public class ClientProxy extends CommonProxy { active = false; if (configManager.keepCacheBetweenSessions.getBoolean()) return; initialized = false; + worldSpawnBoundingBox = null; + spawnChunksBoundingBox = null; for (BoundingBoxCache cache : boundingBoxCacheMap.values()) { cache.close(); } @@ -299,6 +310,7 @@ public class ClientProxy extends CommonProxy { renderSlimeChunk((BoundingBoxSlimeChunk) bb); } else if (bb instanceof BoundingBoxWorldSpawn) { renderWorldSpawn((BoundingBoxWorldSpawn) bb); + } else { renderBoundingBox(bb); } @@ -318,11 +330,9 @@ public class ClientProxy extends CommonProxy { private void renderWorldSpawn(BoundingBoxWorldSpawn bb) { AxisAlignedBB aaBB = bb.toAxisAlignedBB(false); - double maxY = getMaxY(configManager.worldSpawnMaxY.getInt()); - aaBB = new AxisAlignedBB(aaBB.minX, maxY, aaBB.minZ, aaBB.maxX, maxY, aaBB.maxZ); Color color = bb.getColor(); - renderCuboid(aaBB, color, fill()); - + double y = getMaxY(configManager.worldSpawnMaxY.getInt()); + renderRectangle(aaBB, y, y, color); } private void renderSlimeChunk(BoundingBoxSlimeChunk bb) { @@ -332,8 +342,7 @@ public class ClientProxy extends CommonProxy { double maxY = getMaxY(configManager.slimeChunkMaxY.getInt()); if (maxY > 39) { - aaBB = new AxisAlignedBB(aaBB.minX, 39, aaBB.minZ, aaBB.maxX, maxY, aaBB.maxZ); - renderCuboid(aaBB, color, fill()); + renderRectangle(aaBB, 39, maxY, color); } } @@ -347,6 +356,11 @@ public class ClientProxy extends CommonProxy { return configMaxY; } + private void renderRectangle(AxisAlignedBB aaBB, double minY, double maxY, Color color) { + aaBB = new AxisAlignedBB(aaBB.minX, minY, aaBB.minZ, aaBB.maxX, maxY, aaBB.maxZ); + renderCuboid(aaBB, color, fill()); + } + private boolean fill() { return configManager.fill.getBoolean(); } @@ -529,9 +543,7 @@ public class ClientProxy extends CommonProxy { int dimensionId = world.provider.getDimensionId(); if (dimensionId == 0) { if (configManager.drawWorldSpawn.getBoolean()) { - int spawnX = world.getWorldInfo().getSpawnX(); - int spawnZ = world.getWorldInfo().getSpawnZ(); - boundingBoxes.add(getSpawnBoundingBox(spawnX, spawnZ)); + boundingBoxes.add(getWorldSpawnBoundingBox(spawnX, spawnZ)); boundingBoxes.add(getSpawnChunksBoundingBox(spawnX, spawnZ)); } @@ -559,6 +571,9 @@ public class ClientProxy extends CommonProxy { } private BoundingBox getSpawnChunksBoundingBox(int spawnX, int spawnZ) { + if(spawnChunksBoundingBox != null) + return spawnChunksBoundingBox; + double chunkSize = 16; double midOffset = chunkSize * 6; double midX = Math.round((float) (spawnX / chunkSize)) * chunkSize; @@ -569,13 +584,20 @@ public class ClientProxy extends CommonProxy { midZ += chunkSize; } BlockPos maxBlockPos = new BlockPos(midX + midOffset, 0, midZ + midOffset); - return new BoundingBoxWorldSpawn(minBlockPos, maxBlockPos, Color.RED); + BoundingBox boundingBox = BoundingBoxWorldSpawn.from(minBlockPos, maxBlockPos, Color.RED); + spawnChunksBoundingBox = boundingBox; + return boundingBox; } - private BoundingBoxWorldSpawn getSpawnBoundingBox(int spawnX, int spawnZ) { + private BoundingBox getWorldSpawnBoundingBox(int spawnX, int spawnZ) { + if(worldSpawnBoundingBox != null) + return worldSpawnBoundingBox; + BlockPos minBlockPos = new BlockPos(spawnX - 10, 0, spawnZ - 10); BlockPos maxBlockPos = new BlockPos(spawnX + 10, 0, spawnZ + 10); - return new BoundingBoxWorldSpawn(minBlockPos, maxBlockPos, Color.RED); + BoundingBox boundingBox = BoundingBoxWorldSpawn.from(minBlockPos, maxBlockPos, Color.RED); + worldSpawnBoundingBox = boundingBox; + return boundingBox; } } diff --git a/java/com/irtimaled/bbor/messages/BoundingBoxDeserializer.java b/java/com/irtimaled/bbor/messages/BoundingBoxDeserializer.java index 0098d06..c56a884 100644 --- a/java/com/irtimaled/bbor/messages/BoundingBoxDeserializer.java +++ b/java/com/irtimaled/bbor/messages/BoundingBoxDeserializer.java @@ -15,28 +15,10 @@ public class BoundingBoxDeserializer { return deserializeVillage(buf); case 'S': return deserializeStructure(buf); - case 'C': - return deserializeSlimeChunk(buf); - case 'W': - return deserializeWorldSpawn(buf); } return null; } - private static BoundingBox deserializeWorldSpawn(ByteBuf buf) { - BlockPos minBlockPos = deserializeBlockPos(buf); - BlockPos maxBlockPos = deserializeBlockPos(buf); - Color color = new Color(ByteBufUtils.readVarInt(buf, 5)); - return BoundingBoxWorldSpawn.from(minBlockPos, maxBlockPos, color); - } - - private static BoundingBox deserializeSlimeChunk(ByteBuf buf) { - BlockPos minBlockPos = deserializeBlockPos(buf); - BlockPos maxBlockPos = deserializeBlockPos(buf); - Color color = new Color(ByteBufUtils.readVarInt(buf, 5)); - return BoundingBoxSlimeChunk.from(minBlockPos, maxBlockPos, color); - } - private static BoundingBox deserializeStructure(ByteBuf buf) { BlockPos minBlockPos = deserializeBlockPos(buf); BlockPos maxBlockPos = deserializeBlockPos(buf); diff --git a/java/com/irtimaled/bbor/messages/BoundingBoxSerializer.java b/java/com/irtimaled/bbor/messages/BoundingBoxSerializer.java index 0297ead..eefb0f1 100644 --- a/java/com/irtimaled/bbor/messages/BoundingBoxSerializer.java +++ b/java/com/irtimaled/bbor/messages/BoundingBoxSerializer.java @@ -10,12 +10,6 @@ import java.awt.*; public class BoundingBoxSerializer { public static void serialize(BoundingBox boundingBox, ByteBuf buf) { - if (boundingBox instanceof BoundingBoxWorldSpawn) { - serializeWorldSpawn((BoundingBoxWorldSpawn) boundingBox, buf); - } - if (boundingBox instanceof BoundingBoxSlimeChunk) { - serializeSlimeChunk((BoundingBoxSlimeChunk) boundingBox, buf); - } if (boundingBox instanceof BoundingBoxVillage) { serializeVillage((BoundingBoxVillage) boundingBox, buf); } @@ -39,18 +33,6 @@ public class BoundingBoxSerializer { serializeColor(boundingBox.getColor(), buf); } - private static void serializeSlimeChunk(BoundingBoxSlimeChunk boundingBox, ByteBuf buf) { - ByteBufUtils.writeVarShort(buf, 'C'); - serializeCuboid(boundingBox, buf); - serializeColor(boundingBox.getColor(), buf); - } - - private static void serializeWorldSpawn(BoundingBoxWorldSpawn boundingBox, ByteBuf buf) { - ByteBufUtils.writeVarShort(buf, 'W'); - serializeCuboid(boundingBox, buf); - serializeColor(boundingBox.getColor(), buf); - } - private static void serializeColor(Color color, ByteBuf buf) { ByteBufUtils.writeVarInt(buf, color.getRGB(), 5); } @@ -65,59 +47,4 @@ public class BoundingBoxSerializer { ByteBufUtils.writeVarInt(buf, blockPos.getY(), 5); ByteBufUtils.writeVarInt(buf, blockPos.getZ(), 5); } - /* - - - public static void serialize(BoundingBox boundingBox, StringBuilder sb) { - if (boundingBox instanceof BoundingBoxSlimeChunk) { - serializeSlimeChunk((BoundingBoxSlimeChunk) boundingBox, sb); - } else if (boundingBox instanceof BoundingBoxVillage) { - serializeVillage((BoundingBoxVillage) boundingBox, sb); - } else if (boundingBox instanceof BoundingBoxStructure) { - serializeStructure((BoundingBoxStructure) boundingBox, sb); - } - } - - private static void serializeVillage(BoundingBoxVillage boundingBox, StringBuilder sb) { - sb.append("V/"); - serializeBlockPos(boundingBox.getCenter(), sb); - sb.append('/'); - sb.append(boundingBox.getRadius()); - sb.append('/'); - sb.append(boundingBox.getSpawnsIronGolems()); - sb.append('/'); - serializeColor(boundingBox.getColor(), sb); - } - - private static void serializeStructure(BoundingBoxStructure boundingBox, StringBuilder sb) { - sb.append("S/"); - serializeCuboid(boundingBox, sb); - sb.append('/'); - serializeColor(boundingBox.getColor(), sb); - } - - private static void serializeSlimeChunk(BoundingBoxSlimeChunk boundingBox, StringBuilder sb) { - sb.append("SC/"); - serializeCuboid(boundingBox, sb); - sb.append('/'); - serializeColor(boundingBox.getColor(), sb); - } - - private static void serializeColor(Color color, StringBuilder sb) { - sb.append(color.getRGB()); - } - - private static void serializeCuboid(BoundingBox boundingBox, StringBuilder sb) { - serializeBlockPos(boundingBox.getMinBlockPos(), sb); - sb.append('/'); - serializeBlockPos(boundingBox.getMaxBlockPos(), sb); - } - - private static void serializeBlockPos(BlockPos blockPos, StringBuilder sb) { - sb.append(blockPos.getX()); - sb.append(','); - sb.append(blockPos.getY()); - sb.append(','); - sb.append(blockPos.getZ()); - }*/ }