Skip to content

Commit 49d0505

Browse files
authored
Merge pull request #2325 from BentoBoxWorld/develop
Release 2.2.0
2 parents 2d08365 + 75412a4 commit 49d0505

38 files changed

+1616
-985
lines changed

pom.xml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
<!-- Do not change unless you want different name for local builds. -->
8989
<build.number>-LOCAL</build.number>
9090
<!-- This allows to change between versions. -->
91-
<build.version>2.1.1</build.version>
91+
<build.version>2.2.0</build.version>
9292
<sonar.organization>bentobox-world</sonar.organization>
9393
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
9494
<server.jars>${project.basedir}/lib</server.jars>
@@ -189,6 +189,12 @@
189189
<id>MG-Dev Jenkins CI Maven Repository</id>
190190
<url>https://ci.mg-dev.eu/plugin/repository/everything</url>
191191
</repository>
192+
<!-- For MythicMobs -->
193+
<repository>
194+
<id>nexus</id>
195+
<name>Lumine Releases</name>
196+
<url>https://mvn.lumine.io/repository/maven-public/</url>
197+
</repository>
192198
</repositories>
193199

194200
<dependencies>
@@ -297,6 +303,12 @@
297303
<version>${myworlds.version}</version>
298304
<scope>provided</scope>
299305
</dependency>
306+
<dependency>
307+
<groupId>io.lumine</groupId>
308+
<artifactId>Mythic-Dist</artifactId>
309+
<version>5.3.5</version>
310+
<scope>provided</scope>
311+
</dependency>
300312
<!-- Shaded APIs -->
301313
<dependency>
302314
<groupId>com.github.TheBusyBiscuit</groupId>

src/main/java/world/bentobox/bentobox/BentoBox.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import world.bentobox.bentobox.hooks.ItemsAdderHook;
2828
import world.bentobox.bentobox.hooks.MultiverseCoreHook;
2929
import world.bentobox.bentobox.hooks.MyWorldsHook;
30+
import world.bentobox.bentobox.hooks.MythicMobsHook;
3031
import world.bentobox.bentobox.hooks.SlimefunHook;
3132
import world.bentobox.bentobox.hooks.VaultHook;
3233
import world.bentobox.bentobox.hooks.placeholders.PlaceholderAPIHook;
@@ -185,6 +186,9 @@ private void completeSetup(long loadTime) {
185186
final long enableStart = System.currentTimeMillis();
186187
hooksManager.registerHook(new VaultHook());
187188

189+
// MythicMobs
190+
hooksManager.registerHook(new MythicMobsHook());
191+
188192
hooksManager.registerHook(new PlaceholderAPIHook());
189193
// Setup the Placeholders manager
190194
placeholdersManager = new PlaceholdersManager(this);

src/main/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamDisbandCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public boolean canExecute(User user, String label, List<String> args) {
8282

8383
private Map<String, Island> getIslandsXYZ(UUID target) {
8484
return getIslands().getOwnedIslands(getWorld(), target).stream().filter(is -> is.getMemberSet().size() > 1) // Filter for teams
85-
.collect(Collectors.toMap(island -> Util.xyz(island.getCenter().toVector()), island -> island));
85+
.collect(Collectors.toMap(is -> Util.xyz(is.getCenter().toVector()), is -> is));
8686
}
8787

8888
@Override

src/main/java/world/bentobox/bentobox/api/commands/admin/team/AdminTeamSetownerCommand.java

Lines changed: 58 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
package world.bentobox.bentobox.api.commands.admin.team;
22

33
import java.util.List;
4+
import java.util.Objects;
5+
import java.util.Optional;
46
import java.util.UUID;
57

8+
import org.bukkit.Bukkit;
9+
import org.bukkit.entity.Player;
10+
import org.eclipse.jdt.annotation.Nullable;
11+
12+
import world.bentobox.bentobox.api.addons.GameModeAddon;
613
import world.bentobox.bentobox.api.commands.CompositeCommand;
14+
import world.bentobox.bentobox.api.commands.ConfirmableCommand;
715
import world.bentobox.bentobox.api.events.island.IslandEvent;
816
import world.bentobox.bentobox.api.events.team.TeamEvent;
917
import world.bentobox.bentobox.api.localization.TextVariables;
@@ -17,7 +25,11 @@
1725
*
1826
* @author tastybento
1927
*/
20-
public class AdminTeamSetownerCommand extends CompositeCommand {
28+
public class AdminTeamSetownerCommand extends ConfirmableCommand {
29+
30+
private @Nullable UUID targetUUID;
31+
private Island island;
32+
private @Nullable UUID previousOwnerUUID;
2133

2234
public AdminTeamSetownerCommand(CompositeCommand parent) {
2335
super(parent, "setowner");
@@ -28,35 +40,50 @@ public void setup() {
2840
setPermission("mod.team.setowner");
2941
setParametersHelp("commands.admin.team.setowner.parameters");
3042
setDescription("commands.admin.team.setowner.description");
43+
this.setOnlyPlayer(true);
3144
}
3245

3346
@Override
34-
public boolean execute(User user, String label, List<String> args) {
47+
public boolean canExecute(User user, String label, List<String> args) {
3548
// If args are not right, show help
3649
if (args.size() != 1) {
3750
showHelp(this, user);
3851
return false;
3952
}
53+
4054
// Get target
41-
UUID targetUUID = Util.getUUID(args.get(0));
55+
targetUUID = Util.getUUID(args.get(0));
4256
if (targetUUID == null) {
4357
user.sendMessage("general.errors.unknown-player", TextVariables.NAME, args.get(0));
4458
return false;
4559
}
46-
if (!getIslands().inTeam(getWorld(), targetUUID)) {
47-
user.sendMessage("general.errors.not-in-team");
60+
// Check that user is on an island
61+
Optional<Island> opIsland = getIslands().getIslandAt(user.getLocation());
62+
if (opIsland.isEmpty()) {
63+
user.sendMessage("commands.admin.team.setowner.must-be-on-island");
4864
return false;
4965
}
50-
Island island = getIslands().getPrimaryIsland(getWorld(), targetUUID);
51-
UUID previousOwnerUUID = island.getOwner();
66+
island = opIsland.get();
67+
previousOwnerUUID = island.getOwner();
5268
if (targetUUID.equals(previousOwnerUUID)) {
5369
user.sendMessage("commands.admin.team.setowner.already-owner", TextVariables.NAME, args.get(0));
5470
return false;
5571
}
72+
return true;
73+
}
5674

57-
// Get the User corresponding to the current owner
58-
User target = User.getInstance(targetUUID);
75+
public boolean execute(User user, String label, List<String> args) {
76+
Objects.requireNonNull(island);
77+
Objects.requireNonNull(targetUUID);
78+
79+
this.askConfirmation(user, user.getTranslation("commands.admin.team.setowner.confirmation", TextVariables.NAME,
80+
args.get(0), TextVariables.XYZ, Util.xyz(island.getCenter().toVector())), () -> changeOwner(user));
81+
return true;
5982

83+
}
84+
85+
protected void changeOwner(User user) {
86+
User target = User.getInstance(targetUUID);
6087
// Fire event so add-ons know
6188
// Call the setowner event
6289
TeamEvent.builder().island(island).reason(TeamEvent.Reason.SETOWNER).involvedPlayer(targetUUID).admin(true)
@@ -70,8 +97,20 @@ public boolean execute(User user, String label, List<String> args) {
7097
.build();
7198

7299
// Make new owner
73-
getIslands().setOwner(getWorld(), user, targetUUID);
74-
user.sendMessage("commands.admin.team.setowner.success", TextVariables.NAME, args.get(0));
100+
getIslands().setOwner(user, targetUUID, island, RanksManager.MEMBER_RANK);
101+
user.sendMessage("commands.admin.team.setowner.success", TextVariables.NAME, target.getName());
102+
103+
// Report if this made player have more islands than expected
104+
// Get how many islands this player has
105+
int num = this.getIslands().getNumberOfConcurrentIslands(targetUUID, getWorld());
106+
int max = target.getPermissionValue(
107+
this.getIWM().getAddon(getWorld()).map(GameModeAddon::getPermissionPrefix).orElse("") + "island.number",
108+
this.getIWM().getWorldSettings(getWorld()).getConcurrentIslands());
109+
if (num > max) {
110+
// You cannot make an island
111+
user.sendMessage("commands.admin.team.setowner.extra-islands", TextVariables.NUMBER, String.valueOf(num),
112+
"[max]", String.valueOf(max));
113+
}
75114

76115
// Call the rank change event for the old island owner
77116
if (previousOwnerUUID != null) {
@@ -80,6 +119,13 @@ public boolean execute(User user, String label, List<String> args) {
80119
.reason(IslandEvent.Reason.RANK_CHANGE)
81120
.rankChange(RanksManager.OWNER_RANK, island.getRank(previousOwnerUUID)).build();
82121
}
83-
return true;
122+
123+
}
124+
125+
@Override
126+
public Optional<List<String>> tabComplete(User user, String alias, List<String> args) {
127+
String lastArg = !args.isEmpty() ? args.get(args.size() - 1) : "";
128+
List<String> options = Bukkit.getOnlinePlayers().stream().map(Player::getName).toList();
129+
return Optional.of(Util.tabLimit(options, lastArg));
84130
}
85131
}

src/main/java/world/bentobox/bentobox/api/commands/island/IslandSethomeCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public boolean canExecute(User user, String label, List<String> args) {
5353

5454
// Check number of homes
5555

56-
int maxHomes = getIslands().getIslands(getWorld(), user).stream().mapToInt(getIslands()::getMaxHomes).sum();
56+
int maxHomes = getIslands().getMaxHomes(island);
5757
if (getIslands().getNumberOfHomesIfAdded(island, String.join(" ", args)) > maxHomes) {
5858
user.sendMessage("commands.island.sethome.too-many-homes", TextVariables.NUMBER, String.valueOf(maxHomes));
5959
user.sendMessage("commands.island.sethome.homes-are");

src/main/java/world/bentobox/bentobox/api/commands/island/team/InviteNamePrompt.java

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)