Skip to content

Commit fcd002d

Browse files
authored
Merge pull request #121 from BentoBoxWorld/develop
Release 1.13.0
2 parents 8de7019 + e667c6b commit fcd002d

File tree

5 files changed

+41
-19
lines changed

5 files changed

+41
-19
lines changed

pom.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@
4747
<java.version>17</java.version>
4848
<powermock.version>2.0.9</powermock.version>
4949
<!-- More visible way how to change dependency versions -->
50-
<spigot.version>1.20.4-R0.1-SNAPSHOT</spigot.version>
51-
<bentobox.version>2.0.0-SNAPSHOT</bentobox.version>
50+
<spigot.version>1.21.1-R0.1-SNAPSHOT</spigot.version>
51+
<bentobox.version>2.5.0-SNAPSHOT</bentobox.version>
5252
<!-- Level addon version -->
5353
<level.version>2.9.0</level.version>
5454
<!-- Revision variable removes warning about dynamic version -->
5555
<revision>${build.version}-SNAPSHOT</revision>
5656
<!-- This allows to change between versions and snapshots. -->
57-
<build.version>1.12.0</build.version>
57+
<build.version>1.13.0</build.version>
5858
<build.number>-LOCAL</build.number>
5959
<sonar.projectKey>BentoBoxWorld_Boxed</sonar.projectKey>
6060
<sonar.organization>bentobox-world</sonar.organization>

src/main/java/world/bentobox/islandfly/FlyToggleCommand.java

-2
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,11 @@ public boolean execute(User user, String label, List<String> args) {
8888
final Player player = user.getPlayer();
8989

9090
if (player.getAllowFlight()) {
91-
9291
// Disable fly and notify player
9392
player.setFlying(false);
9493
player.setAllowFlight(false);
9594
user.sendMessage("islandfly.disable-fly");
9695
} else {
97-
9896
// Enable fly and notify player
9997
player.setAllowFlight(true);
10098
user.sendMessage("islandfly.enable-fly");

src/main/java/world/bentobox/islandfly/IslandFlyPladdon.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,13 @@
1313

1414
public class IslandFlyPladdon extends Pladdon
1515
{
16+
Addon addon;
1617
@Override
1718
public Addon getAddon()
1819
{
19-
return new IslandFlyAddon();
20+
if (addon == null) {
21+
addon = new IslandFlyAddon();
22+
}
23+
return addon;
2024
}
2125
}

src/main/java/world/bentobox/islandfly/listeners/FlyListener.java

+32-12
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
package world.bentobox.islandfly.listeners;
22

3+
import java.util.HashMap;
4+
import java.util.Map;
5+
36
import org.bukkit.Bukkit;
47
import org.bukkit.GameMode;
58
import org.bukkit.entity.Player;
69
import org.bukkit.event.EventHandler;
710
import org.bukkit.event.EventPriority;
811
import org.bukkit.event.Listener;
912
import org.bukkit.event.player.PlayerToggleFlightEvent;
13+
import org.eclipse.jdt.annotation.NonNull;
14+
1015
import world.bentobox.bentobox.api.events.island.IslandEnterEvent;
1116
import world.bentobox.bentobox.api.events.island.IslandExitEvent;
1217
import world.bentobox.bentobox.api.localization.TextVariables;
18+
import world.bentobox.bentobox.api.metadata.MetaDataValue;
1319
import world.bentobox.bentobox.api.user.User;
1420
import world.bentobox.bentobox.database.objects.Island;
1521
import world.bentobox.islandfly.IslandFlyAddon;
@@ -19,25 +25,34 @@
1925
*/
2026
public class FlyListener implements Listener {
2127

28+
private static final @NonNull String ISLANDFLY = "IslandFly-";
2229
/**
2330
* Addon instance object.
2431
*/
25-
private final IslandFlyAddon islandFlyAddon;
32+
private final IslandFlyAddon addon;
2633

2734

2835
/**
2936
* Default constructor.
3037
* @param islandFlyAddon instance of IslandFlyAddon
3138
*/
3239
public FlyListener(final IslandFlyAddon islandFlyAddon) {
33-
this.islandFlyAddon = islandFlyAddon;
40+
this.addon = islandFlyAddon;
3441
}
3542

3643
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
3744
public void onToggleFlight(final PlayerToggleFlightEvent event) {
3845
final User user = User.getInstance(event.getPlayer());
3946
if (checkUser(user)) {
4047
user.sendMessage("islandfly.not-allowed");
48+
} else {
49+
addon.getIslands().getIslandAt(user.getLocation())
50+
.filter(i -> i.getMemberSet().contains(user.getUniqueId())).ifPresent(is -> {
51+
Map<String, MetaDataValue> metaData = new HashMap<>();
52+
metaData.put("IslandFly-" + is.getUniqueId(), new MetaDataValue(event.isFlying()));
53+
user.setMetaData(metaData); // Record the fly state for this island
54+
});
55+
4156
}
4257
}
4358

@@ -46,7 +61,7 @@ public void onToggleFlight(final PlayerToggleFlightEvent event) {
4661
* @return true if fly was blocked
4762
*/
4863
private boolean checkUser(User user) {
49-
String permPrefix = islandFlyAddon.getPlugin().getIWM().getPermissionPrefix(user.getWorld());
64+
String permPrefix = addon.getPlugin().getIWM().getPermissionPrefix(user.getWorld());
5065
// Ignore ops
5166
if (user.isOp() || user.getPlayer().getGameMode().equals(GameMode.CREATIVE)
5267
|| user.getPlayer().getGameMode().equals(GameMode.SPECTATOR)
@@ -57,8 +72,13 @@ private boolean checkUser(User user) {
5772
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
5873
public void onEnterIsland(final IslandEnterEvent event) {
5974
final User user = User.getInstance(event.getPlayerUUID());
75+
user.getMetaData(ISLANDFLY + event.getIsland().getUniqueId())
76+
.ifPresent(mdv -> {
77+
user.getPlayer().setAllowFlight(true);
78+
user.getPlayer().setFlying(mdv.asBoolean());
79+
});
6080
// Wait until after arriving at the island
61-
Bukkit.getScheduler().runTask(this.islandFlyAddon.getPlugin(), () -> checkUser(user));
81+
Bukkit.getScheduler().runTask(this.addon.getPlugin(), () -> checkUser(user));
6282
}
6383

6484
/**
@@ -67,17 +87,16 @@ public void onEnterIsland(final IslandEnterEvent event) {
6787
*/
6888
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
6989
public void onExitIsland(final IslandExitEvent event) {
70-
7190
final User user = User.getInstance(event.getPlayerUUID());
72-
String permPrefix = islandFlyAddon.getPlugin().getIWM().getPermissionPrefix(user.getWorld());
91+
String permPrefix = addon.getPlugin().getIWM().getPermissionPrefix(user.getWorld());
7392
// Ignore ops
7493
if (user.isOp() || user.getPlayer().getGameMode().equals(GameMode.CREATIVE)
7594
|| user.getPlayer().getGameMode().equals(GameMode.SPECTATOR)
7695
|| user.hasPermission(permPrefix + "island.flybypass")
7796
|| (!user.hasPermission(permPrefix + "island.fly")
7897
&& !user.hasPermission(permPrefix + "island.flyspawn"))) return;
7998
// Alert player fly will be disabled
80-
final int flyTimeout = this.islandFlyAddon.getSettings().getFlyTimeout();
99+
final int flyTimeout = this.addon.getSettings().getFlyTimeout();
81100

82101
// If timeout is 0 or less disable fly immediately
83102
if (flyTimeout <= 0) {
@@ -90,7 +109,7 @@ public void onExitIsland(final IslandExitEvent event) {
90109
user.sendMessage("islandfly.fly-outside-alert", TextVariables.NUMBER, String.valueOf(flyTimeout));
91110
}
92111

93-
Bukkit.getScheduler().runTaskLater(this.islandFlyAddon.getPlugin(), () -> removeFly(user), 20L* flyTimeout);
112+
Bukkit.getScheduler().runTaskLater(this.addon.getPlugin(), () -> removeFly(user), 20L * flyTimeout);
94113
}
95114

96115

@@ -103,7 +122,7 @@ boolean removeFly(User user) {
103122
// Verify player is still online
104123
if (!user.isOnline()) return false;
105124

106-
Island island = islandFlyAddon.getIslands().getProtectedIslandAt(user.getLocation()).orElse(null);
125+
Island island = addon.getIslands().getProtectedIslandAt(user.getLocation()).orElse(null);
107126

108127
if (island == null) {
109128
disableFly(user);
@@ -112,7 +131,7 @@ boolean removeFly(User user) {
112131

113132
// Check if player is back on a spawn island
114133
if (island.isSpawn()) {
115-
if (this.islandFlyAddon.getPlugin().getIWM().getAddon(user.getWorld())
134+
if (this.addon.getPlugin().getIWM().getAddon(user.getWorld())
116135
.map(a -> !user.hasPermission(a.getPermissionPrefix() + "island.flyspawn")).orElse(false)) {
117136

118137
disableFly(user);
@@ -121,8 +140,9 @@ boolean removeFly(User user) {
121140
return false;
122141
}
123142

124-
if(islandFlyAddon.getSettings().getFlyMinLevel() > 1 && islandFlyAddon.getLevelAddon() != null) {
125-
if (islandFlyAddon.getLevelAddon().getIslandLevel(island.getWorld(), island.getOwner()) < islandFlyAddon.getSettings().getFlyMinLevel()) {
143+
if (addon.getSettings().getFlyMinLevel() > 1 && addon.getLevelAddon() != null) {
144+
if (addon.getLevelAddon().getIslandLevel(island.getWorld(), island.getOwner()) < addon.getSettings()
145+
.getFlyMinLevel()) {
126146
disableFly(user);
127147
return false;
128148
}

src/main/resources/addon.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ permissions:
1717
default: op
1818
'[gamemode].island.fly':
1919
description: Allows access to fly command.
20-
default: true
20+
default: false
2121
'[gamemode].island.flybypass':
2222
description: Allows to keep fly mode on player death.
2323
default: op

0 commit comments

Comments
 (0)