From 73bf2bd2152565368e4fa6ae4feeb0d4062ede5f Mon Sep 17 00:00:00 2001 From: TomyLobo Date: Wed, 2 Oct 2013 00:58:01 +0200 Subject: [PATCH] Fixed not flipping the center plane blocks. Added regression test so we'll never have to deal with it again. --- .../com/sk89q/worldedit/CuboidClipboard.java | 30 +++++++++---------- .../sk89q/worldedit/CuboidClipboardTest.java | 23 ++++++++++++++ 2 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 src/test/java/com/sk89q/worldedit/CuboidClipboardTest.java diff --git a/src/main/java/com/sk89q/worldedit/CuboidClipboard.java b/src/main/java/com/sk89q/worldedit/CuboidClipboard.java index 550504e94..6f3bddc23 100644 --- a/src/main/java/com/sk89q/worldedit/CuboidClipboard.java +++ b/src/main/java/com/sk89q/worldedit/CuboidClipboard.java @@ -206,16 +206,16 @@ public class CuboidClipboard { for (int xs = 0; xs < wid; ++xs) { for (int z = 0; z < length; ++z) { for (int y = 0; y < height; ++y) { - // Skip the center plane - if (xs == width - xs - 1) { - continue; - } - final BaseBlock block1 = data[xs][y][z]; if (block1 != null) { block1.flip(dir); } + // Skip the center plane + if (xs == width - xs - 1) { + continue; + } + final BaseBlock block2 = data[width - xs - 1][y][z]; if (block2 != null) { block2.flip(dir); @@ -238,16 +238,16 @@ public class CuboidClipboard { for (int zs = 0; zs < len; ++zs) { for (int x = 0; x < width; ++x) { for (int y = 0; y < height; ++y) { - // Skip the center plane - if (zs == length - zs - 1) { - continue; - } - final BaseBlock block1 = data[x][y][zs]; if (block1 != null) { block1.flip(dir); } + // Skip the center plane + if (zs == length - zs - 1) { + continue; + } + final BaseBlock block2 = data[x][y][length - zs - 1]; if (block2 != null) { block2.flip(dir); @@ -270,16 +270,16 @@ public class CuboidClipboard { for (int ys = 0; ys < hei; ++ys) { for (int x = 0; x < width; ++x) { for (int z = 0; z < length; ++z) { - // Skip the center plane - if (ys == height - ys - 1) { - continue; - } - final BaseBlock block1 = data[x][ys][z]; if (block1 != null) { block1.flip(dir); } + // Skip the center plane + if (ys == height - ys - 1) { + continue; + } + final BaseBlock block2 = data[x][height - ys - 1][z]; if (block2 != null) { block2.flip(dir); diff --git a/src/test/java/com/sk89q/worldedit/CuboidClipboardTest.java b/src/test/java/com/sk89q/worldedit/CuboidClipboardTest.java new file mode 100644 index 000000000..52c76d515 --- /dev/null +++ b/src/test/java/com/sk89q/worldedit/CuboidClipboardTest.java @@ -0,0 +1,23 @@ +package com.sk89q.worldedit; + +import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.blocks.BlockID; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class CuboidClipboardTest { + @Test + public void testFlipCenterPlane() throws Exception { + testFlip(0, 1, CuboidClipboard.FlipDirection.UP_DOWN); + testFlip(2, 3, CuboidClipboard.FlipDirection.NORTH_SOUTH); + testFlip(4, 5, CuboidClipboard.FlipDirection.WEST_EAST); + } + + private void testFlip(int data, int expectedDataAfterFlip, CuboidClipboard.FlipDirection flipDirection) { + final CuboidClipboard clipboard = new CuboidClipboard(new Vector(1, 1, 1)); + clipboard.setBlock(Vector.ZERO, new BaseBlock(BlockID.PISTON_BASE, data)); + clipboard.flip(flipDirection); + assertEquals(expectedDataAfterFlip, clipboard.getBlock(Vector.ZERO).getData()); + } +}