From 45ee5b1186d204969e30b5db890e4bc797bc5298 Mon Sep 17 00:00:00 2001 From: tastybento Date: Wed, 15 May 2019 15:16:15 -0700 Subject: [PATCH] Hybrid version. Works on 1.13.2 and 1.14.1 --- pom.xml | 2 +- .../bentobox/warps/WarpPanelManager.java | 2 +- .../bentobox/warps/WarpSignsListener.java | 10 +++--- .../bentobox/warps/WarpSignsManager.java | 31 +++++++------------ .../bentobox/warps/WarpPanelManagerTest.java | 19 ++++++++++-- .../bentobox/warps/WarpSignsListenerTest.java | 26 ++++++++++------ 6 files changed, 51 insertions(+), 39 deletions(-) diff --git a/pom.xml b/pom.xml index ebc4678..d997eeb 100644 --- a/pom.xml +++ b/pom.xml @@ -66,7 +66,7 @@ org.spigotmc spigot-api - 1.14-R0.1-SNAPSHOT + 1.14.1-R0.1-SNAPSHOT provided diff --git a/src/main/java/world/bentobox/warps/WarpPanelManager.java b/src/main/java/world/bentobox/warps/WarpPanelManager.java index 279f9e7..ac5c5f8 100644 --- a/src/main/java/world/bentobox/warps/WarpPanelManager.java +++ b/src/main/java/world/bentobox/warps/WarpPanelManager.java @@ -44,7 +44,7 @@ public class WarpPanelManager { private Material getSignIcon(World world, UUID warpOwner) { Material type = addon.getWarpSignsManager().getWarp(world, warpOwner).getBlock().getType(); - return Material.valueOf(type.toString().replace("_WALL", "")); + return Material.valueOf(type.toString().replace("WALL_", "")); } /** diff --git a/src/main/java/world/bentobox/warps/WarpSignsListener.java b/src/main/java/world/bentobox/warps/WarpSignsListener.java index 03136bc..c956168 100644 --- a/src/main/java/world/bentobox/warps/WarpSignsListener.java +++ b/src/main/java/world/bentobox/warps/WarpSignsListener.java @@ -6,7 +6,6 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; -import org.bukkit.Tag; import org.bukkit.block.Block; import org.bukkit.block.Sign; import org.bukkit.event.EventHandler; @@ -48,10 +47,8 @@ public class WarpSignsListener implements Listener { public void onSignBreak(BlockBreakEvent e) { Block b = e.getBlock(); // Signs only - - if (!Tag - .SIGNS - .isTagged(b.getType())) { + // FIXME: When we drop support for 1.13, switch to Tag.SIGNS + if (!e.getBlock().getType().name().contains("SIGN")) { return; } if (!addon.inRegisteredWorld(b.getWorld())) { @@ -130,7 +127,8 @@ public class WarpSignsListener implements Listener { // so, // deactivate it Block oldSignBlock = oldSignLoc.getBlock(); - if (Tag.SIGNS.isTagged(oldSignBlock.getType())) { + // FIXME: When we drop support for 1.13, switch to Tag.SIGNS + if (oldSignBlock.getType().name().contains("SIGN")) { // The block is still a sign Sign oldSign = (Sign) oldSignBlock.getState(); if (oldSign != null) { diff --git a/src/main/java/world/bentobox/warps/WarpSignsManager.java b/src/main/java/world/bentobox/warps/WarpSignsManager.java index 84bc28f..9c2f6bd 100644 --- a/src/main/java/world/bentobox/warps/WarpSignsManager.java +++ b/src/main/java/world/bentobox/warps/WarpSignsManager.java @@ -18,7 +18,6 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Sound; -import org.bukkit.Tag; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -169,7 +168,7 @@ public class WarpSignsManager { // Load into map if (warps != null) { warps.getWarpSigns().forEach((k,v) -> { - if (k != null && k.getWorld() != null && Tag.SIGNS.isTagged(k.getBlock().getType())) { + if (k != null && k.getWorld() != null && k.getBlock().getType().name().contains("SIGN")) { // Add to map getWarpMap(k.getWorld()).put(v, k); } @@ -184,7 +183,7 @@ public class WarpSignsManager { */ private void popSign(Location loc) { Block b = loc.getBlock(); - if (Tag.SIGNS.isTagged(b.getType())) { + if (b.getType().name().contains("SIGN")) { Sign s = (Sign) b.getState(); if (s != null) { if (s.getLine(0).equalsIgnoreCase(ChatColor.GREEN + addon.getConfig().getString("welcomeLine"))) { @@ -253,7 +252,7 @@ public class WarpSignsManager { List result = new ArrayList<>(); //get the sign info Location signLocation = getWarp(world, uuid); - if (signLocation != null && Tag.SIGNS.isTagged(signLocation.getBlock().getType())) { + if (signLocation != null && signLocation.getBlock().getType().name().contains("SIGN")) { Sign sign = (Sign)signLocation.getBlock().getState(); result.addAll(Arrays.asList(sign.getLines())); // Clean up - remove the [WELCOME] line @@ -383,15 +382,7 @@ public class WarpSignsManager { } // Find out which direction the warp is facing Block b = warpSpot.getBlock(); - if (Tag.STANDING_SIGNS.isTagged(b.getType())) { - org.bukkit.block.data.type.Sign s = (org.bukkit.block.data.type.Sign) b.getBlockData(); - BlockFace directionFacing = s.getRotation(); - Location inFront = b.getRelative(directionFacing).getLocation(); - if ((plugin.getIslands().isSafeLocation(inFront))) { - addon.getWarpSignsManager().warpPlayer(user, inFront, owner, directionFacing, pvp); - return; - } - } else if (Tag.WALL_SIGNS.isTagged(b.getType())) { + if (b.getType().name().contains("WALL_SIGN")) { org.bukkit.block.data.type.WallSign s = (org.bukkit.block.data.type.WallSign) b.getBlockData(); BlockFace directionFacing = s.getFacing(); Location inFront = b.getRelative(directionFacing).getLocation(); @@ -404,6 +395,14 @@ public class WarpSignsManager { addon.getWarpSignsManager().warpPlayer(user, oneDown, owner, directionFacing, pvp); return; } + } else if (b.getType().name().contains("SIGN")) { + org.bukkit.block.data.type.Sign s = (org.bukkit.block.data.type.Sign) b.getBlockData(); + BlockFace directionFacing = s.getRotation(); + Location inFront = b.getRelative(directionFacing).getLocation(); + if ((plugin.getIslands().isSafeLocation(inFront))) { + addon.getWarpSignsManager().warpPlayer(user, inFront, owner, directionFacing, pvp); + return; + } } else { // Warp has been removed user.sendMessage("warps.error.does-not-exist"); @@ -412,12 +411,6 @@ public class WarpSignsManager { } if (!(plugin.getIslands().isSafeLocation(warpSpot))) { user.sendMessage("warps.error.not-safe"); - // WALL_SIGN's will always be unsafe if the place in front is obscured. - if (Tag.STANDING_SIGNS.isTagged(b.getType())) { - addon.getLogger().warning( - "Unsafe warp found at " + warpSpot.toString() + " owned by " + addon.getPlugin().getPlayers().getName(owner)); - - } return; } else { final Location actualWarp = new Location(warpSpot.getWorld(), warpSpot.getBlockX() + 0.5D, warpSpot.getBlockY(), diff --git a/src/test/java/world/bentobox/warps/WarpPanelManagerTest.java b/src/test/java/world/bentobox/warps/WarpPanelManagerTest.java index 55ce215..2b4b4bc 100644 --- a/src/test/java/world/bentobox/warps/WarpPanelManagerTest.java +++ b/src/test/java/world/bentobox/warps/WarpPanelManagerTest.java @@ -11,7 +11,10 @@ import java.util.List; import java.util.UUID; import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemFactory; @@ -30,9 +33,6 @@ import org.powermock.modules.junit4.PowerMockRunner; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.managers.PlayersManager; -import world.bentobox.warps.Warp; -import world.bentobox.warps.WarpPanelManager; -import world.bentobox.warps.WarpSignsManager; import world.bentobox.warps.config.Settings; /** @@ -105,6 +105,19 @@ public class WarpPanelManagerTest { Settings settings = mock(Settings.class); when(settings.getIcon()).thenReturn("SIGN"); when(addon.getSettings()).thenReturn(settings); + + Location location = mock(Location.class); + Block block = mock(Block.class); + Material sign_type; + try { + sign_type = Material.valueOf("SIGN"); + } catch (Exception e) { + sign_type = Material.valueOf("OAK_SIGN"); + } + when(block.getType()).thenReturn(sign_type); + when(location.getBlock()).thenReturn(block); + // Sign block + when(wsm.getWarp(Mockito.any(), Mockito.any())).thenReturn(location); } /** diff --git a/src/test/java/world/bentobox/warps/WarpSignsListenerTest.java b/src/test/java/world/bentobox/warps/WarpSignsListenerTest.java index 3d0f2ec..83c0abd 100644 --- a/src/test/java/world/bentobox/warps/WarpSignsListenerTest.java +++ b/src/test/java/world/bentobox/warps/WarpSignsListenerTest.java @@ -44,6 +44,7 @@ import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.managers.IslandWorldManager; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.LocalesManager; +import world.bentobox.bentobox.managers.PlaceholdersManager; import world.bentobox.bentobox.util.Util; import world.bentobox.warps.config.Settings; @@ -68,19 +69,13 @@ public class WarpSignsListenerTest { private FileConfiguration config; private Settings settings; private IslandsManager im; - @Mock - private Tag value; @Before public void setUp() throws Exception { - PowerMockito.mockStatic(Tag.class); - when(Tag.WOOL).thenReturn(value); // Bukkit PowerMockito.mockStatic(Bukkit.class); pm = mock(PluginManager.class); when(Bukkit.getPluginManager()).thenReturn(pm); - when(value.isTagged(Mockito.any())).thenReturn(true); - when(Bukkit.getTag(Mockito.anyString(), Mockito.any(), Mockito.eq(Material.class))).thenReturn(value); Server server = mock(Server.class); when(server.getVersion()).thenReturn("1.14"); @@ -90,13 +85,18 @@ public class WarpSignsListenerTest { PowerMockito.mockStatic(NamespacedKey.class); NamespacedKey keyValue = mock(NamespacedKey.class); when(NamespacedKey.minecraft(Mockito.anyString())).thenReturn(keyValue); - when(server.getTag(Mockito.anyString(), Mockito.any(), Mockito.eq(Material.class))).thenReturn(value); when(addon.inRegisteredWorld(Mockito.any())).thenReturn(true); when(config.getString(Mockito.anyString())).thenReturn("[WELCOME]"); when(addon.getConfig()).thenReturn(config); // Block - when(block.getType()).thenReturn(Material.OAK_WALL_SIGN); + Material sign; + try { + sign = Material.valueOf("OAK_WALL_SIGN"); + } catch (Exception e) { + sign = Material.valueOf("WALL_SIGN"); + } + when(block.getType()).thenReturn(sign); when(block.getWorld()).thenReturn(world); // Player when(player.hasPermission(Mockito.anyString())).thenReturn(false); @@ -154,6 +154,15 @@ public class WarpSignsListenerTest { PowerMockito.mockStatic(Util.class); when(Util.getWorld(Mockito.any())).thenReturn(world); + // Locales + Answer answer = invocation -> invocation.getArgumentAt(1, String.class); + when(lm.get(Mockito.any(User.class), Mockito.anyString())).thenAnswer(answer); + when(plugin.getLocalesManager()).thenReturn(lm); + + // Placeholders + PlaceholdersManager placeholdersManager = mock(PlaceholdersManager.class); + when(plugin.getPlaceholdersManager()).thenReturn(placeholdersManager); + when(placeholdersManager.replacePlaceholders(Mockito.any(), Mockito.any())).thenAnswer(answer); } @@ -169,7 +178,6 @@ public class WarpSignsListenerTest { when(block.getType()).thenReturn(Material.STONE); wsl.onSignBreak(e); assertFalse(e.isCancelled()); - Mockito.verify(block, Mockito.times(2)).getType(); } @Test