Skip to content

Commit db3b1fe

Browse files
committed
Merge remote-tracking branch 'origin/develop'
Conflicts: pom.xml
2 parents 14000ec + 2d3d2f1 commit db3b1fe

File tree

8 files changed

+98
-50
lines changed

8 files changed

+98
-50
lines changed

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,15 @@
5858
<!-- Non-minecraft related dependencies -->
5959
<powermock.version>2.0.2</powermock.version>
6060
<!-- More visible way how to change dependency versions -->
61-
<spigot.version>1.16.1-R0.1-SNAPSHOT</spigot.version>
62-
<bentobox.version>1.14.0</bentobox.version>
61+
<spigot.version>1.16.3-R0.1-SNAPSHOT</spigot.version>
62+
<bentobox.version>1.15.4</bentobox.version>
6363
<level.version>1.5.0</level.version>
6464
<!-- Revision variable removes warning about dynamic version -->
6565
<revision>${build.version}-SNAPSHOT</revision>
6666
<!-- Do not change unless you want different name for local builds. -->
6767
<build.number>-LOCAL</build.number>
6868
<!-- This allows to change between versions. -->
69-
<build.version>1.10.1</build.version>
69+
<build.version>1.10.2</build.version>
7070
</properties>
7171

7272
<!-- Profiles will allow to automatically change build version. -->

src/main/java/world/bentobox/warps/WarpSignsManager.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,12 @@ void loadWarpList() {
186186
// Load into map
187187
if (warpsData != null) {
188188
warpsData.getWarpSigns().forEach((k,v) -> {
189-
if (k != null && k.getWorld() != null && k.getBlock().getType().name().contains("SIGN")) {
189+
if (k != null && k.getWorld() != null) {
190+
if (k.getWorld().isChunkLoaded(k.getBlockX() >> 4, k.getBlockZ() >> 4)
191+
&& !k.getBlock().getType().name().contains("SIGN")) {
192+
return;
193+
}
194+
190195
// Add to map
191196
getWarpMap(k.getWorld()).put(v, k);
192197
}
@@ -327,13 +332,17 @@ private void warpPlayer(@NonNull User user, @NonNull Location inFront, @NonNull
327332
final Location actualWarp = new Location(inFront.getWorld(), inFront.getBlockX() + 0.5D, inFront.getBlockY(),
328333
inFront.getBlockZ() + 0.5D, yaw, 30F);
329334
Util.teleportAsync(user.getPlayer(), actualWarp, TeleportCause.COMMAND);
335+
User warpOwner = User.getInstance(signOwner);
336+
// Hide invisible players
337+
if (warpOwner.isOnline() && !warpOwner.getPlayer().canSee(user.getPlayer())) {
338+
return;
339+
}
330340
if (pvp) {
331341
user.sendMessage("protection.flags.PVP_OVERWORLD.active");
332342
user.getWorld().playSound(user.getLocation(), Sound.ENTITY_ARROW_HIT, 1F, 1F);
333343
} else {
334344
user.getWorld().playSound(user.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 1F, 1F);
335-
}
336-
User warpOwner = User.getInstance(signOwner);
345+
}
337346
if (!warpOwner.equals(user)) {
338347
warpOwner.sendMessage("warps.player-warped", "[name]", user.getName());
339348
}

src/main/java/world/bentobox/warps/commands/WarpCommand.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
* The /is warp <name> command
1818
*
1919
* @author tastybento
20-
*
2120
*/
2221
public class WarpCommand extends DelayedTeleportCommand {
2322

@@ -52,12 +51,22 @@ public boolean execute(User user, String label, List<String> args) {
5251
user.sendMessage("warps.warpTip", "[text]", addon.getSettings().getWelcomeLine());
5352
return false;
5453
} else {
55-
// Check if this is part of a name
56-
UUID foundWarp = warpList.stream().filter(u -> getPlayers().getName(u).equalsIgnoreCase(args.get(0))
57-
|| getPlayers().getName(u).toLowerCase().startsWith(args.get(0).toLowerCase())).findFirst().orElse(null);
54+
// Attemp to find warp with exact player's name
55+
UUID foundWarp = warpList.stream().filter(u -> getPlayers().getName(u).equalsIgnoreCase(args.get(0))).findFirst().orElse(null);
56+
5857
if (foundWarp == null) {
59-
user.sendMessage("warps.error.does-not-exist");
60-
return false;
58+
59+
// Atempt to find warp which starts with the given name
60+
UUID foundAlernativeWarp = warpList.stream().filter(u -> getPlayers().getName(u).toLowerCase().startsWith(args.get(0).toLowerCase())).findFirst().orElse(null);
61+
62+
if (foundAlernativeWarp == null) {
63+
user.sendMessage("warps.error.does-not-exist");
64+
return false;
65+
} else {
66+
// Alternative warp found!
67+
this.delayCommand(user, () -> addon.getWarpSignsManager().warpPlayer(world, user, foundAlernativeWarp));
68+
return true;
69+
}
6170
} else {
6271
// Warp exists!
6372
this.delayCommand(user, () -> addon.getWarpSignsManager().warpPlayer(world, user, foundWarp));

src/main/java/world/bentobox/warps/listeners/WarpSignsListener.java

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package world.bentobox.warps.listeners;
22

3+
import java.util.HashMap;
4+
import java.util.Iterator;
35
import java.util.Map;
46
import java.util.UUID;
57

6-
import org.bukkit.Bukkit;
7-
import org.bukkit.ChatColor;
8-
import org.bukkit.Location;
9-
import org.bukkit.World;
8+
import org.bukkit.*;
109
import org.bukkit.block.Block;
1110
import org.bukkit.block.Sign;
1211
import org.bukkit.entity.Player;
@@ -16,9 +15,12 @@
1615
import org.bukkit.event.block.BlockBreakEvent;
1716
import org.bukkit.event.block.SignChangeEvent;
1817

18+
import org.bukkit.event.world.ChunkLoadEvent;
19+
import org.bukkit.scheduler.BukkitRunnable;
1920
import world.bentobox.bentobox.BentoBox;
20-
import world.bentobox.bentobox.api.events.team.TeamEvent.TeamKickEvent;
21-
import world.bentobox.bentobox.api.events.team.TeamEvent.TeamLeaveEvent;
21+
import world.bentobox.bentobox.api.events.addon.AddonEvent;
22+
import world.bentobox.bentobox.api.events.team.TeamKickEvent;
23+
import world.bentobox.bentobox.api.events.team.TeamLeaveEvent;
2224
import world.bentobox.bentobox.api.user.User;
2325
import world.bentobox.bentobox.util.Util;
2426
import world.bentobox.warps.Warp;
@@ -44,20 +46,49 @@ public WarpSignsListener(Warp addon) {
4446
this.plugin = addon.getPlugin();
4547
}
4648

49+
@EventHandler(priority = EventPriority.NORMAL)
50+
public void onChunkLoad(ChunkLoadEvent event) {
51+
// Delay to wait the chunk to be fully loaded
52+
new BukkitRunnable() {
53+
@Override
54+
public void run() {
55+
boolean changed = false;
56+
Iterator<Map.Entry<UUID, Location>> iterator =
57+
addon.getWarpSignsManager().getWarpMap(event.getWorld()).entrySet().iterator();
58+
while (iterator.hasNext()) {
59+
Map.Entry<UUID, Location> entry = iterator.next();
60+
UUID uuid = entry.getKey();
61+
Location location = entry.getValue();
62+
if (event.getChunk().getX() == location.getBlockX() >> 4
63+
&& event.getChunk().getZ() == location.getBlockZ() >> 4
64+
&& !Tag.SIGNS.isTagged(location.getBlock().getType())) {
65+
iterator.remove();
66+
// Remove sign from warp panel cache
67+
addon.getWarpPanelManager().removeWarp(event.getWorld(), uuid);
68+
changed = true;
69+
}
70+
}
71+
if (changed) {
72+
addon.getWarpSignsManager().saveWarpList();
73+
}
74+
}
75+
}.runTask(plugin);
76+
}
77+
4778
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
4879
public void onPlayerLeave(TeamLeaveEvent e) {
4980
// Remove any warp signs from this game mode
5081
addon.getWarpSignsManager().removeWarp(e.getIsland().getWorld(), e.getPlayerUUID());
5182
User.getInstance(e.getPlayerUUID()).sendMessage("warps.deactivate");
5283
}
53-
84+
5485
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
5586
public void onPlayerLeave(TeamKickEvent e) {
5687
// Remove any warp signs from this game mode
5788
addon.getWarpSignsManager().removeWarp(e.getIsland().getWorld(), e.getPlayerUUID());
5889
User.getInstance(e.getPlayerUUID()).sendMessage("warps.deactivate");
5990
}
60-
91+
6192
/**
6293
* Checks to see if a sign has been broken
6394
* @param e - event
@@ -197,6 +228,13 @@ private void addSign(SignChangeEvent e, User user, Block b) {
197228
for (int i = 1; i<4; i++) {
198229
e.setLine(i, ChatColor.translateAlternateColorCodes('&', e.getLine(i)));
199230
}
231+
232+
Map<String, Object> keyValues = new HashMap<>();
233+
keyValues.put("eventName", "WarpCreateEvent");
234+
keyValues.put("targetPlayer", user.getUniqueId());
235+
keyValues.put("location", Util.getStringLocation(b.getLocation()));
236+
237+
new AddonEvent().builder().addon(addon).keyValues(keyValues).build();
200238
}
201239
// Else null player
202240
}

src/main/resources/addon.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Warps
22
main: world.bentobox.warps.Warp
33
version: ${version}${build.number}
44
icon: OAK_SIGN
5-
api-version: 1.14
5+
api-version: 1.15.4
66

77
authors: tastybento
88

src/main/resources/locales/tr.yml

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,27 @@
1-
###########################################################################################
2-
# This is a YML file. Be careful when editing. Check your edits in a YAML checker like #
3-
# the one at http://yaml-online-parser.appspot.com #
4-
###########################################################################################
5-
6-
warp:
7-
help:
8-
description: "Oyuncunun bölge tabelası."
9-
parameters: <name>
10-
warps:
1+
---
2+
warp:
3+
help:
4+
description: Oyuncunun bölge tabelası.
5+
parameters: "<name>"
6+
warps:
117
deactivate: "&cEski ada warpı silindi!"
12-
error:
13-
does-not-exist: "&4Malasef sorun oluştu. Tekrar dene."
8+
error:
9+
does-not-exist: "&cÜzgünüm. Böyle bir bölge artık yok!"
1410
no-permission: "&4Buna yetkin yok!"
11+
not-safe: "&4Ada bölgesi güvenli değil!"
1512
no-remove: "&4Bu tabelayı kıramazsın!"
1613
no-warps-yet: "&4Böyle bir bölge henüz yok."
1714
not-enough-level: "&4Bunu koyman için daha fazla ada leveline ihtiyacın var."
1815
not-on-island: "&4Adanda değilsin."
19-
not-safe: "&4Ada bölgesi güvenli değil!"
2016
your-level-is: "&9Ada levelin &e[level] &9ve &e[required]&9'den fazla olması gerek!"
21-
help:
22-
description: "Bölge panelini açar."
23-
next: "&6Sonraki Sayfa"
17+
help:
18+
description: Bölge panelini açar.
2419
player-warped: "&d[name] &9ada bölgene ışınlandı!"
25-
previous: "&6Önceki sayfa"
2620
sign-removed: "&4Ada tabelası kaldırıldı!"
27-
success: "&9Başarılı!"
28-
title: "&3&lSon&b&lCesurlar &e&lBölgeler &5"
29-
warpTip: "&9Ada warpı açmak için tabelanın en üstüne &e[text] &9yaz!"
21+
success: "&aBaşarılı!"
22+
title: "&dOyuncu bölgeleri &8- &5"
23+
warpTip: "&6Ada bölgesi açmak için tabelanın en üstüne &a[text] &9yaz!"
3024
warpToPlayersSign: "&d[player] &9bölgesine gidiliyor!"
31-
25+
next: "&6Sonraki Sayfa"
26+
previous: "&6Önceki sayfa"
27+
random: "&4Rastgele bölgeye git!"

src/test/java/world/bentobox/warps/WarpSignsManagerTest.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@
2020
import java.util.UUID;
2121
import java.util.logging.Logger;
2222

23-
import org.bukkit.Bukkit;
24-
import org.bukkit.ChatColor;
25-
import org.bukkit.Location;
26-
import org.bukkit.Material;
27-
import org.bukkit.OfflinePlayer;
28-
import org.bukkit.Server;
29-
import org.bukkit.World;
23+
import org.bukkit.*;
3024
import org.bukkit.World.Environment;
3125
import org.bukkit.block.Block;
3226
import org.bukkit.block.BlockFace;
@@ -165,7 +159,8 @@ public void setUp() throws Exception {
165159
when(location.getBlockY()).thenReturn(24);
166160
when(location.getBlockZ()).thenReturn(25);
167161
when(world.getEnvironment()).thenReturn(Environment.NORMAL);
168-
162+
when(world.isChunkLoaded(anyInt(), anyInt())).thenReturn(true);
163+
169164
// Block
170165
when(block.getType()).thenReturn(Material.ACACIA_SIGN);
171166
when(block.getLocation()).thenReturn(location);

src/test/java/world/bentobox/warps/commands/WarpCommandTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ public void testExecuteUserStringListOfStringKnownPlayerMixedCase() {
219219
*/
220220
@Test
221221
public void testExecuteUserStringListOfStringKnownPlayerStartOnly() {
222+
when(pm.getName(any())).thenReturn("tastybento");
222223
warpCommandWarpCompositeCommand();
223224
assertTrue(wc.execute(user, "warp", Collections.singletonList("tAsTy")));
224225
//verify(wsm).warpPlayer(eq(world), eq(user), any());

0 commit comments

Comments
 (0)