Trapdoors in roof were not counted as doors.

Fixes https://github.com/BentoBoxWorld/Greenhouses/issues/73
This commit is contained in:
tastybento 2021-02-03 17:40:42 -08:00
parent 39a88a4f84
commit 88b655ee00
5 changed files with 34 additions and 7 deletions

View File

@ -11,6 +11,7 @@ import java.util.stream.Collectors;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.NonNull;
@ -29,7 +30,7 @@ public class Roof extends MinMaxXZ {
static { static {
List<Material> r = Arrays.stream(Material.values()) List<Material> r = Arrays.stream(Material.values())
.filter(Material::isBlock) // Blocks only, no items .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.name().contains("GLASS") && !m.name().contains("GLASS_PANE")) // All glass blocks
|| m.equals(Material.HOPPER)) // Hoppers || m.equals(Material.HOPPER)) // Hoppers
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

@ -201,8 +201,8 @@ public class GreenhouseFinder {
*/ */
boolean checkDoorsHoppers(CounterCheck cc, Material m, Vector v) { boolean checkDoorsHoppers(CounterCheck cc, Material m, Vector v) {
// Count doors // Count doors
if (Tag.DOORS.isTagged(m)) { if (Tag.TRAPDOORS.isTagged(m) || Tag.DOORS.isTagged(m)) {
cc.doorCount++; 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 we already have 8 doors add these blocks to the red list
if (cc.doorCount > 8) { if (cc.doorCount > 8) {

View File

@ -7,8 +7,10 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.junit.Before; import org.junit.Before;
@ -30,7 +32,7 @@ import world.bentobox.greenhouses.world.AsyncWorldCache;
* *
*/ */
@RunWith(PowerMockRunner.class) @RunWith(PowerMockRunner.class)
@PrepareForTest(Greenhouses.class) @PrepareForTest({Greenhouses.class, Bukkit.class})
public class RoofTest { public class RoofTest {
private Roof roof; private Roof roof;
@ -49,6 +51,8 @@ public class RoofTest {
*/ */
@Before @Before
public void setUp() throws Exception { 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); PowerMockito.mockStatic(Greenhouses.class, Mockito.RETURNS_MOCKS);
when(Greenhouses.getInstance()).thenReturn(addon); when(Greenhouses.getInstance()).thenReturn(addon);
s = new Settings(); s = new Settings();

View File

@ -5,6 +5,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@ -12,6 +13,7 @@ import java.util.concurrent.CompletableFuture;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.World; import org.bukkit.World;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -36,7 +38,6 @@ import world.bentobox.greenhouses.world.AsyncWorldCache;
@PrepareForTest({Bukkit.class, Greenhouses.class}) @PrepareForTest({Bukkit.class, Greenhouses.class})
public class WallsTest { public class WallsTest {
@Mock
private Roof roof; private Roof roof;
@Mock @Mock
private Location location; private Location location;
@ -63,6 +64,9 @@ public class WallsTest {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); 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); PowerMockito.mockStatic(Greenhouses.class, Mockito.RETURNS_MOCKS);
when(Greenhouses.getInstance()).thenReturn(addon); when(Greenhouses.getInstance()).thenReturn(addon);
s = new Settings(); s = new Settings();

View File

@ -6,6 +6,7 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import java.util.Collection; import java.util.Collection;
@ -54,7 +55,7 @@ public class GreenhouseFinderTest {
// Class under test // Class under test
private GreenhouseFinder gf; private GreenhouseFinder gf;
private CounterCheck cc; private CounterCheck cc;
@Mock
private Roof roof; private Roof roof;
@Mock @Mock
private Walls walls; private Walls walls;
@ -68,6 +69,9 @@ public class GreenhouseFinderTest {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS); 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 // Location
when(location.getBlockX()).thenReturn(5); when(location.getBlockX()).thenReturn(5);
when(location.getBlockY()).thenReturn(14); when(location.getBlockY()).thenReturn(14);
@ -198,14 +202,28 @@ public class GreenhouseFinderTest {
*/ */
@Test @Test
public void testCheckDoorsHoppers() { public void testCheckDoorsHoppers() {
// Doors are 2 blocks
when(Tag.DOORS.isTagged(any(Material.class))).thenReturn(true); when(Tag.DOORS.isTagged(any(Material.class))).thenReturn(true);
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
assertTrue("Door number " + i, gf.checkDoorsHoppers(cc, Material.ACACIA_DOOR, new Vector(0,0,0))); 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))); 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)}. * Test method for {@link world.bentobox.greenhouses.managers.GreenhouseFinder#checkDoorsHoppers(world.bentobox.greenhouses.managers.GreenhouseFinder.CounterCheck, org.bukkit.block.Block)}.
*/ */