From 88b655ee00f3ca306529d608bbbf5b705080702d Mon Sep 17 00:00:00 2001 From: tastybento Date: Wed, 3 Feb 2021 17:40:42 -0800 Subject: [PATCH] Trapdoors in roof were not counted as doors. Fixes https://github.com/BentoBoxWorld/Greenhouses/issues/73 --- .../bentobox/greenhouses/greenhouse/Roof.java | 3 ++- .../managers/GreenhouseFinder.java | 4 ++-- .../greenhouses/greenhouse/RoofTest.java | 6 ++++- .../greenhouses/greenhouse/WallsTest.java | 6 ++++- .../managers/GreenhouseFinderTest.java | 22 +++++++++++++++++-- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/main/java/world/bentobox/greenhouses/greenhouse/Roof.java b/src/main/java/world/bentobox/greenhouses/greenhouse/Roof.java index 66fa347..9108a5e 100644 --- a/src/main/java/world/bentobox/greenhouses/greenhouse/Roof.java +++ b/src/main/java/world/bentobox/greenhouses/greenhouse/Roof.java @@ -11,6 +11,7 @@ import java.util.stream.Collectors; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Tag; import org.bukkit.World; import org.bukkit.util.Vector; import org.eclipse.jdt.annotation.NonNull; @@ -29,7 +30,7 @@ public class Roof extends MinMaxXZ { static { List r = Arrays.stream(Material.values()) .filter(Material::isBlock) // Blocks only, no items - .filter(m -> m.name().contains("TRAPDOOR") // All trapdoors + .filter(m -> Tag.TRAPDOORS.isTagged(m) // All trapdoors || (m.name().contains("GLASS") && !m.name().contains("GLASS_PANE")) // All glass blocks || m.equals(Material.HOPPER)) // Hoppers .collect(Collectors.toList()); diff --git a/src/main/java/world/bentobox/greenhouses/managers/GreenhouseFinder.java b/src/main/java/world/bentobox/greenhouses/managers/GreenhouseFinder.java index abb3d05..81ea71b 100644 --- a/src/main/java/world/bentobox/greenhouses/managers/GreenhouseFinder.java +++ b/src/main/java/world/bentobox/greenhouses/managers/GreenhouseFinder.java @@ -201,8 +201,8 @@ public class GreenhouseFinder { */ boolean checkDoorsHoppers(CounterCheck cc, Material m, Vector v) { // Count doors - if (Tag.DOORS.isTagged(m)) { - cc.doorCount++; + if (Tag.TRAPDOORS.isTagged(m) || Tag.DOORS.isTagged(m)) { + cc.doorCount = Tag.TRAPDOORS.isTagged(m) ? cc.doorCount + 2 : cc.doorCount + 1; // If we already have 8 doors add these blocks to the red list if (cc.doorCount > 8) { diff --git a/src/test/java/world/bentobox/greenhouses/greenhouse/RoofTest.java b/src/test/java/world/bentobox/greenhouses/greenhouse/RoofTest.java index 7968438..a6d59c1 100644 --- a/src/test/java/world/bentobox/greenhouses/greenhouse/RoofTest.java +++ b/src/test/java/world/bentobox/greenhouses/greenhouse/RoofTest.java @@ -7,8 +7,10 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.when; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Tag; import org.bukkit.World; import org.bukkit.util.Vector; import org.junit.Before; @@ -30,7 +32,7 @@ import world.bentobox.greenhouses.world.AsyncWorldCache; * */ @RunWith(PowerMockRunner.class) -@PrepareForTest(Greenhouses.class) +@PrepareForTest({Greenhouses.class, Bukkit.class}) public class RoofTest { private Roof roof; @@ -49,6 +51,8 @@ public class RoofTest { */ @Before public void setUp() throws Exception { + PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); + when(Tag.TRAPDOORS.isTagged(Material.BIRCH_TRAPDOOR)).thenReturn(true); PowerMockito.mockStatic(Greenhouses.class, Mockito.RETURNS_MOCKS); when(Greenhouses.getInstance()).thenReturn(addon); s = new Settings(); diff --git a/src/test/java/world/bentobox/greenhouses/greenhouse/WallsTest.java b/src/test/java/world/bentobox/greenhouses/greenhouse/WallsTest.java index cb9f0fe..6c687f9 100644 --- a/src/test/java/world/bentobox/greenhouses/greenhouse/WallsTest.java +++ b/src/test/java/world/bentobox/greenhouses/greenhouse/WallsTest.java @@ -5,6 +5,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.concurrent.CompletableFuture; @@ -12,6 +13,7 @@ import java.util.concurrent.CompletableFuture; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Tag; import org.bukkit.World; import org.junit.Before; import org.junit.Test; @@ -36,7 +38,6 @@ import world.bentobox.greenhouses.world.AsyncWorldCache; @PrepareForTest({Bukkit.class, Greenhouses.class}) public class WallsTest { - @Mock private Roof roof; @Mock private Location location; @@ -63,6 +64,9 @@ public class WallsTest { @Before public void setUp() throws Exception { PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); + when(Tag.TRAPDOORS.isTagged(Material.BIRCH_TRAPDOOR)).thenReturn(true); + // Declare mock after mocking Bukkit + roof = mock(Roof.class); PowerMockito.mockStatic(Greenhouses.class, Mockito.RETURNS_MOCKS); when(Greenhouses.getInstance()).thenReturn(addon); s = new Settings(); diff --git a/src/test/java/world/bentobox/greenhouses/managers/GreenhouseFinderTest.java b/src/test/java/world/bentobox/greenhouses/managers/GreenhouseFinderTest.java index 8dbd8dc..75a9c6b 100644 --- a/src/test/java/world/bentobox/greenhouses/managers/GreenhouseFinderTest.java +++ b/src/test/java/world/bentobox/greenhouses/managers/GreenhouseFinderTest.java @@ -6,6 +6,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.Collection; @@ -54,7 +55,7 @@ public class GreenhouseFinderTest { // Class under test private GreenhouseFinder gf; private CounterCheck cc; - @Mock + private Roof roof; @Mock private Walls walls; @@ -68,6 +69,9 @@ public class GreenhouseFinderTest { @Before public void setUp() throws Exception { PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); + when(Tag.TRAPDOORS.isTagged(Material.BIRCH_TRAPDOOR)).thenReturn(true); + // Declare mock after mocking Bukkit + roof = mock(Roof.class); // Location when(location.getBlockX()).thenReturn(5); when(location.getBlockY()).thenReturn(14); @@ -198,14 +202,28 @@ public class GreenhouseFinderTest { */ @Test public void testCheckDoorsHoppers() { + // Doors are 2 blocks when(Tag.DOORS.isTagged(any(Material.class))).thenReturn(true); for (int i = 0; i < 8; i++) { assertTrue("Door number " + i, gf.checkDoorsHoppers(cc, Material.ACACIA_DOOR, new Vector(0,0,0))); } - // 9th door will fail + // 5th door will fail assertFalse(gf.checkDoorsHoppers(cc, Material.ACACIA_DOOR, new Vector(0,0,0))); } + /** + * Test method for {@link world.bentobox.greenhouses.managers.GreenhouseFinder#checkDoorsHoppers(CounterCheck, Material, Vector)} + */ + @Test + public void testCheckDoorsHoppersTrapdoors() { + // Trapdoors are one block + for (int i = 0; i < 4; i++) { + assertTrue("Door number " + i, gf.checkDoorsHoppers(cc, Material.BIRCH_TRAPDOOR, new Vector(0,0,0))); + } + // 5th door will fail + assertFalse(gf.checkDoorsHoppers(cc, Material.BIRCH_TRAPDOOR, new Vector(0,0,0))); + } + /** * Test method for {@link world.bentobox.greenhouses.managers.GreenhouseFinder#checkDoorsHoppers(world.bentobox.greenhouses.managers.GreenhouseFinder.CounterCheck, org.bukkit.block.Block)}. */