Skip to content

Commit a114094

Browse files
authored
Merge pull request #612 from Multiverse/feat/world-matcher
Add support for resolving group worlds based on wildcard or regex
2 parents 88ac83d + 6161684 commit a114094

18 files changed

Lines changed: 210 additions & 64 deletions

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ dependencies {
3636

3737
// Core
3838
// TODO update to correct version once we have it published
39-
externalPlugin 'org.mvplugins.multiverse.core:multiverse-core:5.0.0-SNAPSHOT'
39+
externalPlugin 'org.mvplugins.multiverse.core:multiverse-core:5.2.0-SNAPSHOT'
4040

4141
// Config
4242
shadowed 'com.dumptruckman.minecraft:JsonConfiguration:1.2-SNAPSHOT'

src/main/java/org/mvplugins/multiverse/inventories/PlaceholderExpansionHook.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,14 @@ private String groupPlaceholders(OfflinePlayer offlinePlayer, List<String> param
128128
private String getGroupPlaceholderValue(WorldGroup worldGroup, String placeholder) {
129129
return switch (placeholder) {
130130
case "name" -> worldGroup.getName();
131-
case "worlds" -> StringFormatter.join(worldGroup.getWorlds(), ", ");
131+
case "worlds" -> StringFormatter.join(worldGroup.getApplicableWorlds(), ", ");
132132
case "shares" -> StringFormatter.join(worldGroup.getShares().toStringList(), ", ");
133-
case "players" -> StringFormatter.join(worldGroup.getWorlds().stream()
133+
case "players" -> StringFormatter.join(worldGroup.getApplicableWorlds().stream()
134134
.map(Bukkit::getWorld)
135135
.filter(Objects::nonNull)
136136
.flatMap(world -> world.getPlayers().stream().map(Player::getName))
137137
.toList(), ", ");
138-
case "playercount" -> worldGroup.getWorlds().stream()
138+
case "playercount" -> worldGroup.getApplicableWorlds().stream()
139139
.map(Bukkit::getWorld)
140140
.filter(Objects::nonNull)
141141
.map(World::getPlayers)

src/main/java/org/mvplugins/multiverse/inventories/command/MVInvCommandCompletion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ private Collection<String> suggestWorldGroups(BukkitCommandCompletionContext con
171171
private Collection<String> suggestWorldGroupWorlds(BukkitCommandCompletionContext context) {
172172

173173
var worlds = Try.of(() -> context.getContextValue(WorldGroup.class))
174-
.map(WorldGroup::getWorlds)
174+
.map(WorldGroup::getConfigWorlds)
175175
.getOrElse(Collections.emptySet());
176176

177177
return addonToCommaSeperated(context.getInput(), worlds);

src/main/java/org/mvplugins/multiverse/inventories/commands/AddWorldsCommand.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22

33
import org.jvnet.hk2.annotations.Service;
44
import org.mvplugins.multiverse.core.command.MVCommandIssuer;
5-
import org.mvplugins.multiverse.core.command.MVCommandManager;
6-
import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld;
7-
import org.mvplugins.multiverse.core.world.MultiverseWorld;
8-
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandAlias;
5+
import org.mvplugins.multiverse.core.utils.REPatterns;
96
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandCompletion;
107
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandPermission;
118
import org.mvplugins.multiverse.external.acf.commands.annotation.Description;
9+
import org.mvplugins.multiverse.external.acf.commands.annotation.Single;
1210
import org.mvplugins.multiverse.external.acf.commands.annotation.Subcommand;
1311
import org.mvplugins.multiverse.external.acf.commands.annotation.Syntax;
1412
import org.mvplugins.multiverse.external.jakarta.inject.Inject;
@@ -44,13 +42,16 @@ void onAddWorldCommand(
4442
@Description("Group you want to add the world to.")
4543
WorldGroup group,
4644

45+
@Single
4746
@Syntax("<world>")
4847
@Description("World name to add.")
49-
MultiverseWorld[] worlds
48+
String worlds
5049
) {
51-
List<String> worldNames = Arrays.stream(worlds).map(MultiverseWorld::getName).toList();
50+
List<String> worldNames = Arrays.stream(REPatterns.COMMA.split(worlds))
51+
.map(String::toLowerCase)
52+
.toList();
5253
String worldNamesString = String.join(", ", worldNames);
53-
if (!group.getWorlds().addAll(worldNames)) {
54+
if (!group.getConfigWorlds().addAll(worldNames)) {
5455
issuer.sendError(MVInvi18n.ADDWORLD_WORLDALREADYEXISTS,
5556
replace("{group}").with(group.getName()),
5657
replace("{world}").with(worldNamesString));

src/main/java/org/mvplugins/multiverse/inventories/commands/CreateGroupCommand.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
import org.jvnet.hk2.annotations.Service;
44
import org.mvplugins.multiverse.core.command.MVCommandIssuer;
5-
import org.mvplugins.multiverse.core.command.MVCommandManager;
6-
import org.mvplugins.multiverse.core.world.MultiverseWorld;
7-
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandAlias;
5+
import org.mvplugins.multiverse.core.utils.REPatterns;
86
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandCompletion;
97
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandPermission;
108
import org.mvplugins.multiverse.external.acf.commands.annotation.Conditions;
@@ -19,7 +17,7 @@
1917
import org.mvplugins.multiverse.inventories.share.Shares;
2018
import org.mvplugins.multiverse.inventories.util.MVInvi18n;
2119

22-
import java.util.Arrays;
20+
import java.util.List;
2321

2422
import static org.mvplugins.multiverse.core.locale.message.MessageReplacement.replace;
2523

@@ -47,22 +45,22 @@ void onCreateGroupCommand(
4745

4846
@Optional
4947
@Syntax("[world[,extra]]")
50-
MultiverseWorld[] worlds,
48+
String worlds,
5149

5250
@Optional
5351
@Syntax("[share,[extra]]")
5452
Shares shares
5553
) {
5654
WorldGroup worldGroup = worldGroupManager.newEmptyGroup(groupName);
5755
if (worlds != null) {
58-
worldGroup.getWorlds().addAll(Arrays.stream(worlds).map(MultiverseWorld::getName).toList());
56+
worldGroup.addWorlds(List.of(REPatterns.COMMA.split(worlds)), false);
5957
}
6058
if (shares != null) {
6159
worldGroup.getShares().mergeShares(shares);
6260
}
6361
worldGroupManager.updateGroup(worldGroup);
6462
issuer.sendInfo(MVInvi18n.GROUP_CREATIONCOMPLETE, replace("{group}").with(groupName));
65-
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(worldGroup.getWorlds()));
63+
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(worldGroup.getConfigWorlds()));
6664
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFOSHARES, replace("{shares}").with(worldGroup.getShares()));
6765
}
6866
}

src/main/java/org/mvplugins/multiverse/inventories/commands/InfoCommand.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import org.mvplugins.multiverse.core.command.LegacyAliasCommand;
44
import org.mvplugins.multiverse.core.command.MVCommandIssuer;
5+
import org.mvplugins.multiverse.core.utils.StringFormatter;
56
import org.mvplugins.multiverse.inventories.profile.key.ContainerType;
67
import org.mvplugins.multiverse.inventories.profile.container.ProfileContainerStoreProvider;
78
import org.mvplugins.multiverse.inventories.profile.group.WorldGroup;
89
import org.bukkit.Bukkit;
9-
import org.mvplugins.multiverse.core.command.MVCommandManager;
1010
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandAlias;
1111
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandCompletion;
1212
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandPermission;
@@ -82,7 +82,7 @@ void onInfoCommand(
8282

8383
private void groupInfo(MVCommandIssuer issuer, WorldGroup worldGroup) {
8484
StringBuilder worldsString = new StringBuilder();
85-
Set<String> worlds = worldGroup.getWorlds();
85+
Set<String> worlds = worldGroup.getConfigWorlds();
8686
if (worlds.isEmpty()) {
8787
worldsString.append("N/A");
8888
} else {
@@ -93,6 +93,8 @@ private void groupInfo(MVCommandIssuer issuer, WorldGroup worldGroup) {
9393
worldsString.append(world);
9494
}
9595
}
96+
//todo: Better messaging formatting here
97+
issuer.sendMessage("Applicable Worlds: " + StringFormatter.join(worldGroup.getApplicableWorlds(), ", "));
9698
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(worldsString));
9799
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFOSHARES, replace("{shares}").with(worldGroup.getShares()));
98100
}

src/main/java/org/mvplugins/multiverse/inventories/commands/RemoveWorldsCommand.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
import org.jvnet.hk2.annotations.Service;
44
import org.mvplugins.multiverse.core.command.MVCommandIssuer;
5-
import org.mvplugins.multiverse.core.command.MVCommandManager;
6-
import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld;
7-
import org.mvplugins.multiverse.core.world.MultiverseWorld;
8-
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandAlias;
5+
import org.mvplugins.multiverse.core.utils.REPatterns;
96
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandCompletion;
107
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandPermission;
118
import org.mvplugins.multiverse.external.acf.commands.annotation.Description;
@@ -51,14 +48,13 @@ void onRemoveWorldCommand(
5148
@Description("World name to remove.")
5249
String worldNames
5350
) {
54-
List<String> worldNamesArr = Arrays.stream(worldNames.split(",")).toList();
51+
List<String> worldNamesArr = Arrays.stream(REPatterns.COMMA.split(worldNames)).toList();
5552
if (!group.removeWorlds(worldNamesArr)) {
5653
issuer.sendError(MVInvi18n.REMOVEWORLD_WORLDNOTINGROUP,
5754
replace("{group}").with(group.getName()),
5855
replace("{world}").with(worldNames));
5956
return;
6057
}
61-
worldGroupManager.updateGroup(group);
6258
issuer.sendInfo(MVInvi18n.REMOVEWORLD_WORLDREMOVED,
6359
replace("{group}").with(group.getName()),
6460
replace("{world}").with(worldNames));

src/main/java/org/mvplugins/multiverse/inventories/commands/prompts/GroupSharesPrompt.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public Prompt acceptInput(@NotNull final ConversationContext conversationContext
6161
issuer.sendInfo(MVInvi18n.GROUP_UPDATED);
6262
}
6363
issuer.sendInfo(MVInvi18n.INFO_GROUP, replace("{group}").with(group.getName()));
64-
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(group.getWorlds()));
64+
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(group.getConfigWorlds()));
6565
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFOSHARES, replace("{shares}").with(group.getShares()));
6666
worldGroupManager.checkForConflicts(issuer);
6767
return nextPrompt;

src/main/java/org/mvplugins/multiverse/inventories/commands/prompts/GroupWorldsPrompt.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public GroupWorldsPrompt(final MultiverseInventories plugin, final MVCommandIssu
3131
this.group = group;
3232
this.nextPrompt = nextPrompt;
3333
this.isCreating = creatingGroup;
34-
this.worlds = new HashSet<String>(group.getWorlds());
34+
this.worlds = new HashSet<>(group.getConfigWorlds());
3535
}
3636

3737
@NotNull
@@ -64,7 +64,7 @@ public Prompt acceptInput(@NotNull final ConversationContext conversationContext
6464
worldGroupManager.updateGroup(group);
6565
issuer.sendInfo(MVInvi18n.GROUP_UPDATED);
6666
issuer.sendInfo(MVInvi18n.INFO_GROUP, replace("{group}").with(group.getName()));
67-
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(group.getWorlds()));
67+
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(group.getConfigWorlds()));
6868
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFOSHARES, replace("{shares}").with(group.getShares()));
6969
}
7070
return nextPrompt;

src/main/java/org/mvplugins/multiverse/inventories/profile/bulkedit/PlayerProfilesAggregator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.mvplugins.multiverse.inventories.profile.bulkedit;
22

33
import com.google.common.collect.Sets;
4-
import org.jetbrains.annotations.ApiStatus;
54
import org.jvnet.hk2.annotations.Service;
65
import org.mvplugins.multiverse.external.jakarta.inject.Inject;
76
import org.mvplugins.multiverse.inventories.profile.group.WorldGroup;
@@ -80,7 +79,7 @@ private ContainerKey[] includeGroupsWorlds(ContainerKey[] containerKeys) {
8079
if (group == null) {
8180
continue;
8281
}
83-
containerKeyList.addAll(group.getWorlds().stream()
82+
containerKeyList.addAll(group.getApplicableWorlds().stream()
8483
.map(worldName -> ContainerKey.create(ContainerType.WORLD, worldName))
8584
.toList());
8685
}

0 commit comments

Comments
 (0)