From fd06c0cdd7767a8445aecfc7febe8f712e4daf1c Mon Sep 17 00:00:00 2001 From: wellnesscookie <46493763+wellnesscookie@users.noreply.github.com> Date: Thu, 6 Aug 2020 21:14:50 +0200 Subject: [PATCH 1/8] Fixes unwanted parsing when warping to an island (#86) * Fixes incorrect parsing when warping to similiar players * Removes debug lines --- .../bentobox/warps/commands/WarpCommand.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/java/world/bentobox/warps/commands/WarpCommand.java b/src/main/java/world/bentobox/warps/commands/WarpCommand.java index be45106..d593192 100644 --- a/src/main/java/world/bentobox/warps/commands/WarpCommand.java +++ b/src/main/java/world/bentobox/warps/commands/WarpCommand.java @@ -17,7 +17,6 @@ import world.bentobox.warps.Warp; * The /is warp command * * @author tastybento - * */ public class WarpCommand extends DelayedTeleportCommand { @@ -52,12 +51,22 @@ public class WarpCommand extends DelayedTeleportCommand { user.sendMessage("warps.warpTip", "[text]", addon.getSettings().getWelcomeLine()); return false; } else { - // Check if this is part of a name - UUID foundWarp = warpList.stream().filter(u -> getPlayers().getName(u).equalsIgnoreCase(args.get(0)) - || getPlayers().getName(u).toLowerCase().startsWith(args.get(0).toLowerCase())).findFirst().orElse(null); + // Attemp to find warp with exact player's name + UUID foundWarp = warpList.stream().filter(u -> getPlayers().getName(u).equalsIgnoreCase(args.get(0))).findFirst().orElse(null); + if (foundWarp == null) { - user.sendMessage("warps.error.does-not-exist"); - return false; + + // Atempt to find warp which starts with the given name + UUID foundAlernativeWarp = warpList.stream().filter(u -> getPlayers().getName(u).toLowerCase().startsWith(args.get(0).toLowerCase())).findFirst().orElse(null); + + if (foundAlernativeWarp == null) { + user.sendMessage("warps.error.does-not-exist"); + return false; + } else { + // Alternative warp found! + this.delayCommand(user, () -> addon.getWarpSignsManager().warpPlayer(world, user, foundAlernativeWarp)); + return true; + } } else { // Warp exists! this.delayCommand(user, () -> addon.getWarpSignsManager().warpPlayer(world, user, foundWarp)); From abf4b882c0d4cbd506a8ba584b8692399eeda056 Mon Sep 17 00:00:00 2001 From: tastybento Date: Thu, 6 Aug 2020 21:06:19 -0700 Subject: [PATCH 2/8] Fixes test --- src/test/java/world/bentobox/warps/commands/WarpCommandTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/world/bentobox/warps/commands/WarpCommandTest.java b/src/test/java/world/bentobox/warps/commands/WarpCommandTest.java index 75dea30..4a22464 100644 --- a/src/test/java/world/bentobox/warps/commands/WarpCommandTest.java +++ b/src/test/java/world/bentobox/warps/commands/WarpCommandTest.java @@ -219,6 +219,7 @@ public class WarpCommandTest { */ @Test public void testExecuteUserStringListOfStringKnownPlayerStartOnly() { + when(pm.getName(any())).thenReturn("tastybento"); warpCommandWarpCompositeCommand(); assertTrue(wc.execute(user, "warp", Collections.singletonList("tAsTy"))); //verify(wsm).warpPlayer(eq(world), eq(user), any()); From bee85b0db176b46c302b73f941797bb0310c417d Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 29 Aug 2020 08:58:44 -0700 Subject: [PATCH 3/8] Do not send warp message if player is hidden. https://github.com/BentoBoxWorld/Warps/issues/87 --- pom.xml | 2 +- src/main/java/world/bentobox/warps/WarpSignsManager.java | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 9d2c275..3df88bd 100644 --- a/pom.xml +++ b/pom.xml @@ -66,7 +66,7 @@ -LOCAL - 1.10.0 + 1.10.1 diff --git a/src/main/java/world/bentobox/warps/WarpSignsManager.java b/src/main/java/world/bentobox/warps/WarpSignsManager.java index 1295c24..bf9a1ef 100644 --- a/src/main/java/world/bentobox/warps/WarpSignsManager.java +++ b/src/main/java/world/bentobox/warps/WarpSignsManager.java @@ -327,13 +327,17 @@ public class WarpSignsManager { final Location actualWarp = new Location(inFront.getWorld(), inFront.getBlockX() + 0.5D, inFront.getBlockY(), inFront.getBlockZ() + 0.5D, yaw, 30F); Util.teleportAsync(user.getPlayer(), actualWarp, TeleportCause.COMMAND); + User warpOwner = User.getInstance(signOwner); + // Hide invisible players + if (warpOwner.isOnline() && !warpOwner.getPlayer().canSee(user.getPlayer())) { + return; + } if (pvp) { user.sendMessage("protection.flags.PVP_OVERWORLD.active"); user.getWorld().playSound(user.getLocation(), Sound.ENTITY_ARROW_HIT, 1F, 1F); } else { user.getWorld().playSound(user.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 1F, 1F); - } - User warpOwner = User.getInstance(signOwner); + } if (!warpOwner.equals(user)) { warpOwner.sendMessage("warps.player-warped", "[name]", user.getName()); } From 45b968820bd243546a053fb2e19cea2808c0d983 Mon Sep 17 00:00:00 2001 From: Gabriele C Date: Mon, 7 Sep 2020 18:14:44 +0200 Subject: [PATCH 4/8] Don't validate unloaded signs on startup (#85) * Don't validate unloaded signs in startup * Actually stop loading chunks * Fix crash issues due to unwanted chunk loads in the sign ChunkLoadEvent listener * Delay chunk handling, fixes CMEs --- .../bentobox/warps/WarpSignsManager.java | 7 +++- .../warps/listeners/WarpSignsListener.java | 37 +++++++++++++++++-- .../bentobox/warps/WarpSignsManagerTest.java | 11 ++---- 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/main/java/world/bentobox/warps/WarpSignsManager.java b/src/main/java/world/bentobox/warps/WarpSignsManager.java index bf9a1ef..87ddae1 100644 --- a/src/main/java/world/bentobox/warps/WarpSignsManager.java +++ b/src/main/java/world/bentobox/warps/WarpSignsManager.java @@ -186,7 +186,12 @@ public class WarpSignsManager { // Load into map if (warpsData != null) { warpsData.getWarpSigns().forEach((k,v) -> { - if (k != null && k.getWorld() != null && k.getBlock().getType().name().contains("SIGN")) { + if (k != null && k.getWorld() != null) { + if (k.getWorld().isChunkLoaded(k.getBlockX() >> 4, k.getBlockZ() >> 4) + && !k.getBlock().getType().name().contains("SIGN")) { + return; + } + // Add to map getWarpMap(k.getWorld()).put(v, k); } diff --git a/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java b/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java index 3def898..e0735af 100644 --- a/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java +++ b/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java @@ -1,12 +1,10 @@ package world.bentobox.warps.listeners; +import java.util.Iterator; import java.util.Map; import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.World; +import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.Sign; import org.bukkit.entity.Player; @@ -16,6 +14,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.SignChangeEvent; +import org.bukkit.event.world.ChunkLoadEvent; +import org.bukkit.scheduler.BukkitRunnable; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.events.team.TeamEvent.TeamKickEvent; import world.bentobox.bentobox.api.events.team.TeamEvent.TeamLeaveEvent; @@ -44,6 +44,35 @@ public class WarpSignsListener implements Listener { this.plugin = addon.getPlugin(); } + @EventHandler(priority = EventPriority.NORMAL) + public void onChunkLoad(ChunkLoadEvent event) { + // Delay to wait the chunk to be fully loaded + new BukkitRunnable() { + @Override + public void run() { + boolean changed = false; + Iterator> iterator = + addon.getWarpSignsManager().getWarpMap(event.getWorld()).entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + UUID uuid = entry.getKey(); + Location location = entry.getValue(); + if (event.getChunk().getX() == location.getBlockX() >> 4 + && event.getChunk().getZ() == location.getBlockZ() >> 4 + && !Tag.SIGNS.isTagged(location.getBlock().getType())) { + iterator.remove(); + // Remove sign from warp panel cache + addon.getWarpPanelManager().removeWarp(event.getWorld(), uuid); + changed = true; + } + } + if (changed) { + addon.getWarpSignsManager().saveWarpList(); + } + } + }.runTask(plugin); + } + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onPlayerLeave(TeamLeaveEvent e) { // Remove any warp signs from this game mode diff --git a/src/test/java/world/bentobox/warps/WarpSignsManagerTest.java b/src/test/java/world/bentobox/warps/WarpSignsManagerTest.java index 0e86108..532749e 100644 --- a/src/test/java/world/bentobox/warps/WarpSignsManagerTest.java +++ b/src/test/java/world/bentobox/warps/WarpSignsManagerTest.java @@ -20,13 +20,7 @@ import java.util.Map; import java.util.UUID; import java.util.logging.Logger; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.Server; -import org.bukkit.World; +import org.bukkit.*; import org.bukkit.World.Environment; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -165,7 +159,8 @@ public class WarpSignsManagerTest { when(location.getBlockY()).thenReturn(24); when(location.getBlockZ()).thenReturn(25); when(world.getEnvironment()).thenReturn(Environment.NORMAL); - + when(world.isChunkLoaded(anyInt(), anyInt())).thenReturn(true); + // Block when(block.getType()).thenReturn(Material.ACACIA_SIGN); when(block.getLocation()).thenReturn(location); From e459c53c77dd37857211f7adccbdd9d5f0792999 Mon Sep 17 00:00:00 2001 From: Yasin <20637793+bertek41@users.noreply.github.com> Date: Fri, 11 Sep 2020 04:34:56 +0300 Subject: [PATCH 5/8] WarpCreateEvent (#88) --- .../bentobox/warps/listeners/WarpSignsListener.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java b/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java index e0735af..59b23db 100644 --- a/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java +++ b/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java @@ -1,5 +1,6 @@ package world.bentobox.warps.listeners; +import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.UUID; @@ -17,6 +18,7 @@ import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.scheduler.BukkitRunnable; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.api.events.addon.AddonEvent; import world.bentobox.bentobox.api.events.team.TeamEvent.TeamKickEvent; import world.bentobox.bentobox.api.events.team.TeamEvent.TeamLeaveEvent; import world.bentobox.bentobox.api.user.User; @@ -226,6 +228,13 @@ public class WarpSignsListener implements Listener { for (int i = 1; i<4; i++) { e.setLine(i, ChatColor.translateAlternateColorCodes('&', e.getLine(i))); } + + Map keyValues = new HashMap<>(); + keyValues.put("eventName", "WarpCreateEvent"); + keyValues.put("targetPlayer", user.getUniqueId()); + keyValues.put("location", Util.getStringLocation(b.getLocation())); + + new AddonEvent().builder().addon(addon).keyValues(keyValues).build(); } // Else null player } From 1591bfc36d1ad66e99e519dfd5a719b4836dfcbe Mon Sep 17 00:00:00 2001 From: "gitlocalize-app[bot]" <55277160+gitlocalize-app[bot]@users.noreply.github.com> Date: Wed, 9 Dec 2020 11:51:43 -0800 Subject: [PATCH 6/8] Translate tr.yml via GitLocalize (#90) Co-authored-by: Over_Brave --- src/main/resources/locales/tr.yml | 38 ++++++++++++++----------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/main/resources/locales/tr.yml b/src/main/resources/locales/tr.yml index 7ab3f4e..5da34df 100644 --- a/src/main/resources/locales/tr.yml +++ b/src/main/resources/locales/tr.yml @@ -1,31 +1,27 @@ -########################################################################################### -# This is a YML file. Be careful when editing. Check your edits in a YAML checker like # -# the one at http://yaml-online-parser.appspot.com # -########################################################################################### - -warp: - help: - description: "Oyuncunun bölge tabelası." - parameters: -warps: +--- +warp: + help: + description: Oyuncunun bölge tabelası. + parameters: "" +warps: deactivate: "&cEski ada warpı silindi!" - error: - does-not-exist: "&4Malasef sorun oluştu. Tekrar dene." + error: + does-not-exist: "&cÜzgünüm. Böyle bir bölge artık yok!" no-permission: "&4Buna yetkin yok!" + not-safe: "&4Ada bölgesi güvenli değil!" no-remove: "&4Bu tabelayı kıramazsın!" no-warps-yet: "&4Böyle bir bölge henüz yok." not-enough-level: "&4Bunu koyman için daha fazla ada leveline ihtiyacın var." not-on-island: "&4Adanda değilsin." - not-safe: "&4Ada bölgesi güvenli değil!" your-level-is: "&9Ada levelin &e[level] &9ve &e[required]&9'den fazla olması gerek!" - help: - description: "Bölge panelini açar." - next: "&6Sonraki Sayfa" + help: + description: Bölge panelini açar. player-warped: "&d[name] &9ada bölgene ışınlandı!" - previous: "&6Önceki sayfa" sign-removed: "&4Ada tabelası kaldırıldı!" - success: "&9Başarılı!" - title: "&3&lSon&b&lCesurlar &e&lBölgeler &5" - warpTip: "&9Ada warpı açmak için tabelanın en üstüne &e[text] &9yaz!" + success: "&aBaşarılı!" + title: "&dOyuncu bölgeleri &8- &5" + warpTip: "&6Ada bölgesi açmak için tabelanın en üstüne &a[text] &9yaz!" warpToPlayersSign: "&d[player] &9bölgesine gidiliyor!" - \ No newline at end of file + next: "&6Sonraki Sayfa" + previous: "&6Önceki sayfa" + random: "&4Rastgele bölgeye git!" From 73aab77c994daf6234ccf3d0d602fc412ff84d20 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sun, 27 Dec 2020 11:14:19 -0800 Subject: [PATCH 7/8] Updated to BentoBox 1.15.4 API --- pom.xml | 6 +++--- .../bentobox/warps/listeners/WarpSignsListener.java | 10 +++++----- src/main/resources/addon.yml | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 3df88bd..c9ac283 100644 --- a/pom.xml +++ b/pom.xml @@ -58,15 +58,15 @@ 2.0.2 - 1.16.1-R0.1-SNAPSHOT - 1.14.0 + 1.16.3-R0.1-SNAPSHOT + 1.15.4-SNAPSHOT 1.5.0 ${build.version}-SNAPSHOT -LOCAL - 1.10.1 + 1.10.2 diff --git a/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java b/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java index 59b23db..f16f48c 100644 --- a/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java +++ b/src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java @@ -19,8 +19,8 @@ import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.scheduler.BukkitRunnable; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.events.addon.AddonEvent; -import world.bentobox.bentobox.api.events.team.TeamEvent.TeamKickEvent; -import world.bentobox.bentobox.api.events.team.TeamEvent.TeamLeaveEvent; +import world.bentobox.bentobox.api.events.team.TeamKickEvent; +import world.bentobox.bentobox.api.events.team.TeamLeaveEvent; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.util.Util; import world.bentobox.warps.Warp; @@ -81,14 +81,14 @@ public class WarpSignsListener implements Listener { addon.getWarpSignsManager().removeWarp(e.getIsland().getWorld(), e.getPlayerUUID()); User.getInstance(e.getPlayerUUID()).sendMessage("warps.deactivate"); } - + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onPlayerLeave(TeamKickEvent e) { // Remove any warp signs from this game mode addon.getWarpSignsManager().removeWarp(e.getIsland().getWorld(), e.getPlayerUUID()); User.getInstance(e.getPlayerUUID()).sendMessage("warps.deactivate"); } - + /** * Checks to see if a sign has been broken * @param e - event @@ -233,7 +233,7 @@ public class WarpSignsListener implements Listener { keyValues.put("eventName", "WarpCreateEvent"); keyValues.put("targetPlayer", user.getUniqueId()); keyValues.put("location", Util.getStringLocation(b.getLocation())); - + new AddonEvent().builder().addon(addon).keyValues(keyValues).build(); } // Else null player diff --git a/src/main/resources/addon.yml b/src/main/resources/addon.yml index 4e346a4..0d3b925 100755 --- a/src/main/resources/addon.yml +++ b/src/main/resources/addon.yml @@ -2,7 +2,7 @@ name: Warps main: world.bentobox.warps.Warp version: ${version}${build.number} icon: OAK_SIGN -api-version: 1.14 +api-version: 1.15.4 authors: tastybento From 2d3d2f10d61117cf746f0670bb09e838e469f055 Mon Sep 17 00:00:00 2001 From: tastybento Date: Wed, 30 Dec 2020 22:58:49 -0800 Subject: [PATCH 8/8] Use BentoBox 1.15.4 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c9ac283..30aa0d5 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ 2.0.2 1.16.3-R0.1-SNAPSHOT - 1.15.4-SNAPSHOT + 1.15.4 1.5.0 ${build.version}-SNAPSHOT