Skip to content

Commit 1293070

Browse files
authored
Merge pull request #613 from Multiverse/5.2
5.2
2 parents d2298d1 + 3292ec0 commit 1293070

File tree

54 files changed

+2569
-226
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2569
-226
lines changed

build.gradle

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
22
id 'checkstyle'
3-
id 'org.mvplugins.multiverse-plugin' version '1.1.0'
3+
id 'org.mvplugins.multiverse-plugin' version '1.2.1'
44
}
55

66
group = 'org.mvplugins.multiverse.inventories'
@@ -21,34 +21,37 @@ repositories {
2121
name = 'benwoo1110'
2222
url = uri('https://repo.c0ding.party/multiverse-beta')
2323
}
24+
25+
maven {
26+
name = "viaversion"
27+
url = uri("https://repo.viaversion.com")
28+
}
2429
}
2530

2631
configure(apiDependencies) {
27-
serverApiVersion = '1.21.3-R0.1-SNAPSHOT'
32+
serverApiVersion = '1.21.8-R0.1-SNAPSHOT'
2833
mockBukkitServerApiVersion = '1.21'
2934
mockBukkitVersion = '4.31.1'
3035
}
3136

3237
dependencies {
33-
// Server API
34-
// TODO make our custom plugin target paper instead of spigot
35-
externalPlugin 'io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT'
36-
3738
// Core
38-
// 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'
4040

4141
// Config
4242
shadowed 'com.dumptruckman.minecraft:JsonConfiguration:1.2-SNAPSHOT'
43-
shadowed 'net.minidev:json-smart:2.5.1'
43+
shadowed 'net.minidev:json-smart:2.6.0'
4444

4545
// Utils
4646
shadowed('com.dumptruckman.minecraft:Logging:1.1.1') {
4747
exclude group: 'junit', module: 'junit'
4848
}
49+
shadowed('com.viaversion:nbt:5.1.1') {
50+
exclude group: 'it.unimi.dsi', module: 'fastutil'
51+
}
4952

5053
// Caching
51-
shadowed("com.github.ben-manes.caffeine:caffeine:3.2.0")
54+
shadowed("com.github.ben-manes.caffeine:caffeine:3.2.2")
5255

5356
// PlaceholderAPI
5457
externalPlugin 'me.clip:placeholderapi:2.11.6'
@@ -69,11 +72,11 @@ dependencies {
6972
}
7073

7174
// hk2 for annotation processing only
72-
compileOnly('org.glassfish.hk2:hk2-api:3.0.3') {
75+
compileOnly('org.glassfish.hk2:hk2-api:3.1.1') {
7376
exclude group: '*', module: '*'
7477
}
75-
annotationProcessor 'org.glassfish.hk2:hk2-metadata-generator:3.0.3'
76-
testAnnotationProcessor 'org.glassfish.hk2:hk2-metadata-generator:3.0.3'
78+
annotationProcessor 'org.glassfish.hk2:hk2-metadata-generator:3.1.1'
79+
testAnnotationProcessor 'org.glassfish.hk2:hk2-metadata-generator:3.1.1'
7780
}
7881

7982
shadowJar {

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
@Service
4545
public class MultiverseInventories extends MultiverseModule {
4646

47-
private static final double TARGET_CORE_API_VERSION = 5.0;
47+
private static final double TARGET_CORE_API_VERSION = 5.2;
4848

4949
@Inject
5050
private Provider<CoreConfig> coreConfig;
@@ -261,7 +261,8 @@ public void reloadConfig() {
261261

262262
inventoriesConfig.get().setFirstRun(false);
263263
}
264-
worldGroupManager.get().checkForConflicts(null);
264+
worldGroupManager.get().checkForConflicts()
265+
.sendConflictIssue(commandManagerProvider.get().getConsoleCommandIssuer());
265266
}, 1L);
266267
}
267268
}

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: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.mvplugins.multiverse.inventories.command;
22

3+
import org.bukkit.Bukkit;
4+
import org.bukkit.generator.WorldInfo;
35
import org.jetbrains.annotations.NotNull;
46
import org.jvnet.hk2.annotations.Service;
57
import org.mvplugins.multiverse.core.command.MVCommandCompletions;
@@ -19,6 +21,7 @@
1921
import org.mvplugins.multiverse.inventories.profile.key.ProfileTypes;
2022
import org.mvplugins.multiverse.inventories.share.Sharables;
2123

24+
import java.io.File;
2225
import java.util.Arrays;
2326
import java.util.Collection;
2427
import java.util.Collections;
@@ -60,6 +63,7 @@ private MVInvCommandCompletion(
6063
commandCompletions.registerAsyncCompletion("shares", this::suggestShares);
6164
commandCompletions.registerAsyncCompletion("worldGroups", this::suggestWorldGroups);
6265
commandCompletions.registerAsyncCompletion("worldGroupWorlds", this::suggestWorldGroupWorlds);
66+
commandCompletions.registerAsyncCompletion("worldwithplayerdata", this::suggestWorldWithPlayerData);
6367
}
6468

6569
private Collection<String> suggestDataImporters(BukkitCommandCompletionContext context) {
@@ -171,9 +175,16 @@ private Collection<String> suggestWorldGroups(BukkitCommandCompletionContext con
171175
private Collection<String> suggestWorldGroupWorlds(BukkitCommandCompletionContext context) {
172176

173177
var worlds = Try.of(() -> context.getContextValue(WorldGroup.class))
174-
.map(WorldGroup::getWorlds)
178+
.map(WorldGroup::getConfigWorlds)
175179
.getOrElse(Collections.emptySet());
176180

177181
return addonToCommaSeperated(context.getInput(), worlds);
178182
}
183+
184+
private Collection<String> suggestWorldWithPlayerData(BukkitCommandCompletionContext context) {
185+
return Bukkit.getWorlds().stream()
186+
.filter(world -> new File(world.getWorldFolder(), "playerdata").isDirectory())
187+
.map(WorldInfo::getName)
188+
.toList();
189+
}
179190
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,6 @@ void onAddDisabledSharesCommand(
4949
issuer.sendInfo(MVInvi18n.DISABLEDSHARES_NOWSHARING,
5050
replace("{group}").with(group.getName()),
5151
replace("{shares}").with(group.getDisabledShares().toStringList()));
52+
worldGroupManager.checkForConflicts().sendConflictIssue(issuer);
5253
}
5354
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,6 @@ void onAddSharesCommand(
5454
replace("{group}").with(group.getName()),
5555
replace("{shares}").with(group.getShares().toStringList()),
5656
replace("{negativeshares}").with(negativeshares.toStringList()));
57+
worldGroupManager.checkForConflicts().sendConflictIssue(issuer);
5758
}
5859
}
Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
package org.mvplugins.multiverse.inventories.commands;
22

3+
import org.bukkit.Bukkit;
34
import org.jvnet.hk2.annotations.Service;
45
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;
6+
import org.mvplugins.multiverse.core.command.flag.CommandFlag;
7+
import org.mvplugins.multiverse.core.command.flag.CommandFlagsManager;
8+
import org.mvplugins.multiverse.core.command.flag.FlagBuilder;
9+
import org.mvplugins.multiverse.core.command.flag.ParsedCommandFlags;
10+
import org.mvplugins.multiverse.core.utils.REPatterns;
911
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandCompletion;
1012
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandPermission;
1113
import org.mvplugins.multiverse.external.acf.commands.annotation.Description;
14+
import org.mvplugins.multiverse.external.acf.commands.annotation.Single;
1215
import org.mvplugins.multiverse.external.acf.commands.annotation.Subcommand;
1316
import org.mvplugins.multiverse.external.acf.commands.annotation.Syntax;
1417
import org.mvplugins.multiverse.external.jakarta.inject.Inject;
1518
import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull;
1619
import org.mvplugins.multiverse.inventories.profile.group.WorldGroup;
1720
import org.mvplugins.multiverse.inventories.profile.group.WorldGroupManager;
21+
import org.mvplugins.multiverse.inventories.util.GroupWorldNameValidator;
1822
import org.mvplugins.multiverse.inventories.util.MVInvi18n;
1923

2024
import java.util.Arrays;
@@ -26,16 +30,24 @@
2630
final class AddWorldsCommand extends InventoriesCommand {
2731

2832
private final WorldGroupManager worldGroupManager;
33+
private final GroupWorldNameValidator groupWorldNameValidator;
34+
private final Flags flags;
2935

3036
@Inject
31-
AddWorldsCommand(@NotNull WorldGroupManager worldGroupManager) {
37+
AddWorldsCommand(
38+
@NotNull WorldGroupManager worldGroupManager,
39+
@NotNull GroupWorldNameValidator groupWorldNameValidator,
40+
@NotNull Flags flags
41+
) {
3242
this.worldGroupManager = worldGroupManager;
43+
this.groupWorldNameValidator = groupWorldNameValidator;
44+
this.flags = flags;
3345
}
3446

3547
@Subcommand("add-worlds")
3648
@CommandPermission("multiverse.inventories.addworlds")
37-
@CommandCompletion("@worldGroups @mvworlds:multiple,scope=both")
38-
@Syntax("<group> <world[,extra]>")
49+
@CommandCompletion("@worldGroups @mvworlds:multiple,scope=both, @flags:groupName=" + Flags.NAME)
50+
@Syntax("<group> <world[,extra]> [--skip-exist-check]")
3951
@Description("Adds a World to a World Group.")
4052
void onAddWorldCommand(
4153
MVCommandIssuer issuer,
@@ -46,11 +58,25 @@ void onAddWorldCommand(
4658

4759
@Syntax("<world>")
4860
@Description("World name to add.")
49-
MultiverseWorld[] worlds
61+
String worlds,
62+
63+
@Syntax("[--skip-exist-check]")
64+
String[] flagArray
5065
) {
51-
List<String> worldNames = Arrays.stream(worlds).map(MultiverseWorld::getName).toList();
66+
ParsedCommandFlags parsedFlags = flags.parse(flagArray);
67+
List<String> worldNames = Arrays.stream(REPatterns.COMMA.split(worlds))
68+
.map(String::toLowerCase)
69+
.toList();
70+
if (!parsedFlags.hasFlag(flags.skipExistCheck)) {
71+
for (String worldName : worldNames) {
72+
if (!groupWorldNameValidator.validateWorldName(worldName)) {
73+
issuer.sendError(MVInvi18n.ERROR_NOWORLD, replace("{world}").with(worldName));
74+
return;
75+
}
76+
}
77+
}
5278
String worldNamesString = String.join(", ", worldNames);
53-
if (!group.getWorlds().addAll(worldNames)) {
79+
if (!group.getConfigWorlds().addAll(worldNames)) {
5480
issuer.sendError(MVInvi18n.ADDWORLD_WORLDALREADYEXISTS,
5581
replace("{group}").with(group.getName()),
5682
replace("{world}").with(worldNamesString));
@@ -60,5 +86,20 @@ void onAddWorldCommand(
6086
issuer.sendInfo(MVInvi18n.ADDWORLD_WORLDADDED,
6187
replace("{group}").with(group.getName()),
6288
replace("{world}").with(worldNamesString));
89+
worldGroupManager.checkForConflicts().sendConflictIssue(issuer);
90+
}
91+
92+
@Service
93+
private static final class Flags extends FlagBuilder {
94+
private static final String NAME = "mvinvaddworlds";
95+
96+
@Inject
97+
private Flags(@NotNull CommandFlagsManager flagsManager) {
98+
super(NAME, flagsManager);
99+
}
100+
101+
private final CommandFlag skipExistCheck = flag(CommandFlag.builder("--skip-exist-check")
102+
.addAlias("-s")
103+
.build());
63104
}
64105
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.mvplugins.multiverse.inventories.commands;
2+
3+
import org.jvnet.hk2.annotations.Service;
4+
import org.mvplugins.multiverse.core.command.MVCommandIssuer;
5+
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandPermission;
6+
import org.mvplugins.multiverse.external.acf.commands.annotation.Description;
7+
import org.mvplugins.multiverse.external.acf.commands.annotation.Subcommand;
8+
import org.mvplugins.multiverse.external.jakarta.inject.Inject;
9+
import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull;
10+
import org.mvplugins.multiverse.inventories.profile.group.GroupingConflictResult;
11+
import org.mvplugins.multiverse.inventories.profile.group.WorldGroupManager;
12+
import org.mvplugins.multiverse.inventories.util.MVInvi18n;
13+
14+
@Service
15+
final class CheckGroupConflictsCommand extends InventoriesCommand {
16+
private final WorldGroupManager worldGroupManager;
17+
18+
@Inject
19+
CheckGroupConflictsCommand(@NotNull WorldGroupManager worldGroupManager) {
20+
this.worldGroupManager = worldGroupManager;
21+
}
22+
23+
@Subcommand("check-group-conflicts")
24+
@CommandPermission("multiverse.inventories.checkgroupconflict")
25+
@Description("Check for conflicts in World Groups.")
26+
void onCommand(@NotNull MVCommandIssuer issuer) {
27+
issuer.sendInfo(MVInvi18n.CONFLICT_CHECKING);
28+
GroupingConflictResult groupingConflictResult = worldGroupManager.checkForConflicts();
29+
if (groupingConflictResult.hasConflict()) {
30+
groupingConflictResult.sendConflictIssue(issuer);
31+
} else {
32+
issuer.sendInfo(MVInvi18n.CONFLICT_NOTFOUND);
33+
}
34+
}
35+
}

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

Lines changed: 6 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,23 @@ 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()));
65+
worldGroupManager.checkForConflicts().sendConflictIssue(issuer);
6766
}
6867
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ void onDeleteGroupCommand(
4949
commandQueueManager.addToQueue(CommandQueuePayload.issuer(issuer)
5050
.prompt(Message.of(MVInvi18n.DELETEGROUP_CONFIRMPROMPT, replace("{group}").with(group.getName())))
5151
.action(() -> doDeleteGroup(issuer, group)));
52+
worldGroupManager.checkForConflicts().sendConflictIssue(issuer);
5253
}
5354

5455
private void doDeleteGroup(MVCommandIssuer issuer, WorldGroup group) {

0 commit comments

Comments
 (0)