Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ dependencies {

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

// Config
shadowed 'com.dumptruckman.minecraft:JsonConfiguration:1.2-SNAPSHOT'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,14 +128,14 @@ private String groupPlaceholders(OfflinePlayer offlinePlayer, List<String> param
private String getGroupPlaceholderValue(WorldGroup worldGroup, String placeholder) {
return switch (placeholder) {
case "name" -> worldGroup.getName();
case "worlds" -> StringFormatter.join(worldGroup.getWorlds(), ", ");
case "worlds" -> StringFormatter.join(worldGroup.getApplicableWorlds(), ", ");
case "shares" -> StringFormatter.join(worldGroup.getShares().toStringList(), ", ");
case "players" -> StringFormatter.join(worldGroup.getWorlds().stream()
case "players" -> StringFormatter.join(worldGroup.getApplicableWorlds().stream()
.map(Bukkit::getWorld)
.filter(Objects::nonNull)
.flatMap(world -> world.getPlayers().stream().map(Player::getName))
.toList(), ", ");
case "playercount" -> worldGroup.getWorlds().stream()
case "playercount" -> worldGroup.getApplicableWorlds().stream()
.map(Bukkit::getWorld)
.filter(Objects::nonNull)
.map(World::getPlayers)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ private Collection<String> suggestWorldGroups(BukkitCommandCompletionContext con
private Collection<String> suggestWorldGroupWorlds(BukkitCommandCompletionContext context) {

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

return addonToCommaSeperated(context.getInput(), worlds);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@

import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.core.command.MVCommandIssuer;
import org.mvplugins.multiverse.core.command.MVCommandManager;
import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld;
import org.mvplugins.multiverse.core.world.MultiverseWorld;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandAlias;
import org.mvplugins.multiverse.core.utils.REPatterns;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandCompletion;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandPermission;
import org.mvplugins.multiverse.external.acf.commands.annotation.Description;
import org.mvplugins.multiverse.external.acf.commands.annotation.Single;
import org.mvplugins.multiverse.external.acf.commands.annotation.Subcommand;
import org.mvplugins.multiverse.external.acf.commands.annotation.Syntax;
import org.mvplugins.multiverse.external.jakarta.inject.Inject;
Expand Down Expand Up @@ -44,13 +42,16 @@ void onAddWorldCommand(
@Description("Group you want to add the world to.")
WorldGroup group,

@Single
@Syntax("<world>")
@Description("World name to add.")
MultiverseWorld[] worlds
String worlds
) {
List<String> worldNames = Arrays.stream(worlds).map(MultiverseWorld::getName).toList();
List<String> worldNames = Arrays.stream(REPatterns.COMMA.split(worlds))
.map(String::toLowerCase)
.toList();
String worldNamesString = String.join(", ", worldNames);
if (!group.getWorlds().addAll(worldNames)) {
if (!group.getConfigWorlds().addAll(worldNames)) {
issuer.sendError(MVInvi18n.ADDWORLD_WORLDALREADYEXISTS,
replace("{group}").with(group.getName()),
replace("{world}").with(worldNamesString));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.core.command.MVCommandIssuer;
import org.mvplugins.multiverse.core.command.MVCommandManager;
import org.mvplugins.multiverse.core.world.MultiverseWorld;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandAlias;
import org.mvplugins.multiverse.core.utils.REPatterns;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandCompletion;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandPermission;
import org.mvplugins.multiverse.external.acf.commands.annotation.Conditions;
Expand All @@ -19,7 +17,7 @@
import org.mvplugins.multiverse.inventories.share.Shares;
import org.mvplugins.multiverse.inventories.util.MVInvi18n;

import java.util.Arrays;
import java.util.List;

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

Expand Down Expand Up @@ -47,22 +45,22 @@ void onCreateGroupCommand(

@Optional
@Syntax("[world[,extra]]")
MultiverseWorld[] worlds,
String worlds,

@Optional
@Syntax("[share,[extra]]")
Shares shares
) {
WorldGroup worldGroup = worldGroupManager.newEmptyGroup(groupName);
if (worlds != null) {
worldGroup.getWorlds().addAll(Arrays.stream(worlds).map(MultiverseWorld::getName).toList());
worldGroup.addWorlds(List.of(REPatterns.COMMA.split(worlds)), false);
}
if (shares != null) {
worldGroup.getShares().mergeShares(shares);
}
worldGroupManager.updateGroup(worldGroup);
issuer.sendInfo(MVInvi18n.GROUP_CREATIONCOMPLETE, replace("{group}").with(groupName));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(worldGroup.getWorlds()));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(worldGroup.getConfigWorlds()));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFOSHARES, replace("{shares}").with(worldGroup.getShares()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

import org.mvplugins.multiverse.core.command.LegacyAliasCommand;
import org.mvplugins.multiverse.core.command.MVCommandIssuer;
import org.mvplugins.multiverse.core.utils.StringFormatter;
import org.mvplugins.multiverse.inventories.profile.key.ContainerType;
import org.mvplugins.multiverse.inventories.profile.container.ProfileContainerStoreProvider;
import org.mvplugins.multiverse.inventories.profile.group.WorldGroup;
import org.bukkit.Bukkit;
import org.mvplugins.multiverse.core.command.MVCommandManager;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandAlias;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandCompletion;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandPermission;
Expand Down Expand Up @@ -82,7 +82,7 @@ void onInfoCommand(

private void groupInfo(MVCommandIssuer issuer, WorldGroup worldGroup) {
StringBuilder worldsString = new StringBuilder();
Set<String> worlds = worldGroup.getWorlds();
Set<String> worlds = worldGroup.getConfigWorlds();
if (worlds.isEmpty()) {
worldsString.append("N/A");
} else {
Expand All @@ -93,6 +93,8 @@ private void groupInfo(MVCommandIssuer issuer, WorldGroup worldGroup) {
worldsString.append(world);
}
}
//todo: Better messaging formatting here
issuer.sendMessage("Applicable Worlds: " + StringFormatter.join(worldGroup.getApplicableWorlds(), ", "));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(worldsString));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFOSHARES, replace("{shares}").with(worldGroup.getShares()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@

import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.core.command.MVCommandIssuer;
import org.mvplugins.multiverse.core.command.MVCommandManager;
import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld;
import org.mvplugins.multiverse.core.world.MultiverseWorld;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandAlias;
import org.mvplugins.multiverse.core.utils.REPatterns;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandCompletion;
import org.mvplugins.multiverse.external.acf.commands.annotation.CommandPermission;
import org.mvplugins.multiverse.external.acf.commands.annotation.Description;
Expand Down Expand Up @@ -51,14 +48,13 @@ void onRemoveWorldCommand(
@Description("World name to remove.")
String worldNames
) {
List<String> worldNamesArr = Arrays.stream(worldNames.split(",")).toList();
List<String> worldNamesArr = Arrays.stream(REPatterns.COMMA.split(worldNames)).toList();
if (!group.removeWorlds(worldNamesArr)) {
issuer.sendError(MVInvi18n.REMOVEWORLD_WORLDNOTINGROUP,
replace("{group}").with(group.getName()),
replace("{world}").with(worldNames));
return;
}
worldGroupManager.updateGroup(group);
issuer.sendInfo(MVInvi18n.REMOVEWORLD_WORLDREMOVED,
replace("{group}").with(group.getName()),
replace("{world}").with(worldNames));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public Prompt acceptInput(@NotNull final ConversationContext conversationContext
issuer.sendInfo(MVInvi18n.GROUP_UPDATED);
}
issuer.sendInfo(MVInvi18n.INFO_GROUP, replace("{group}").with(group.getName()));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(group.getWorlds()));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(group.getConfigWorlds()));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFOSHARES, replace("{shares}").with(group.getShares()));
worldGroupManager.checkForConflicts(issuer);
return nextPrompt;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public GroupWorldsPrompt(final MultiverseInventories plugin, final MVCommandIssu
this.group = group;
this.nextPrompt = nextPrompt;
this.isCreating = creatingGroup;
this.worlds = new HashSet<String>(group.getWorlds());
this.worlds = new HashSet<>(group.getConfigWorlds());
}

@NotNull
Expand Down Expand Up @@ -64,7 +64,7 @@ public Prompt acceptInput(@NotNull final ConversationContext conversationContext
worldGroupManager.updateGroup(group);
issuer.sendInfo(MVInvi18n.GROUP_UPDATED);
issuer.sendInfo(MVInvi18n.INFO_GROUP, replace("{group}").with(group.getName()));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(group.getWorlds()));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFO, replace("{worlds}").with(group.getConfigWorlds()));
issuer.sendInfo(MVInvi18n.INFO_GROUP_INFOSHARES, replace("{shares}").with(group.getShares()));
}
return nextPrompt;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.mvplugins.multiverse.inventories.profile.bulkedit;

import com.google.common.collect.Sets;
import org.jetbrains.annotations.ApiStatus;
import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.external.jakarta.inject.Inject;
import org.mvplugins.multiverse.inventories.profile.group.WorldGroup;
Expand Down Expand Up @@ -80,7 +79,7 @@ private ContainerKey[] includeGroupsWorlds(ContainerKey[] containerKeys) {
if (group == null) {
continue;
}
containerKeyList.addAll(group.getWorlds().stream()
containerKeyList.addAll(group.getApplicableWorlds().stream()
.map(worldName -> ContainerKey.create(ContainerType.WORLD, worldName))
.toList());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package org.mvplugins.multiverse.inventories.profile.group;

import com.dumptruckman.minecraft.util.Logging;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.event.world.WorldUnloadEvent;
import org.jvnet.hk2.annotations.Contract;
import org.mvplugins.multiverse.core.command.MVCommandIssuer;
import org.mvplugins.multiverse.core.command.MVCommandManager;
import org.mvplugins.multiverse.core.event.world.MVWorldLoadedEvent;
import org.mvplugins.multiverse.core.event.world.MVWorldUnloadedEvent;
import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld;
import org.mvplugins.multiverse.core.world.WorldManager;
import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -38,7 +44,7 @@ abstract sealed class AbstractWorldGroupManager implements WorldGroupManager per
protected final ProfileContainerStoreProvider profileContainerStoreProvider;
protected final WorldManager worldManager;

public AbstractWorldGroupManager(
AbstractWorldGroupManager(
@NotNull MultiverseInventories plugin,
@NotNull MVCommandManager commandManager,
@NotNull InventoriesConfig config,
Expand All @@ -49,6 +55,8 @@ public AbstractWorldGroupManager(
this.inventoriesConfig = config;
this.profileContainerStoreProvider = profileContainerStoreProvider;
this.worldManager = worldManager;

Bukkit.getPluginManager().registerEvents(new WorldChangeListener(), plugin);
}

/**
Expand Down Expand Up @@ -94,7 +102,7 @@ public List<WorldGroup> getGroupsForWorld(String worldName) {
@Override
public boolean hasConfiguredGroup(String worldName) {
return groupNamesMap.values().stream()
.anyMatch(worldGroup -> worldGroup.getWorlds().contains(worldName));
.anyMatch(worldGroup -> worldGroup.containsWorld(worldName));
}

/**
Expand All @@ -109,6 +117,7 @@ protected Map<String, WorldGroup> getGroupNames() {
@Override
public void updateGroup(final WorldGroup worldGroup) {
getGroupNames().put(worldGroup.getName().toLowerCase(), worldGroup);
worldGroup.recalculateApplicableWorlds();
worldGroup.recalculateApplicableShares();
}

Expand Down Expand Up @@ -154,9 +163,8 @@ public void createDefaultGroup() {
worldGroup.addWorld(defaultEnd);
}
updateGroup(worldGroup);
worldGroup.recalculateApplicableShares();
Logging.info("Created a default group for you containing all of your default worlds: "
+ String.join(", ", worldGroup.getWorlds()));
+ String.join(", ", worldGroup.getConfigWorlds()));
}

/**
Expand All @@ -181,7 +189,7 @@ public List<GroupingConflict> checkGroups() {
List<GroupingConflict> conflicts = new ArrayList<>();
Map<WorldGroup, WorldGroup> previousConflicts = new HashMap<>();
for (WorldGroup checkingGroup : getGroupNames().values()) {
for (String worldName : checkingGroup.getWorlds()) {
for (String worldName : checkingGroup.getApplicableWorlds()) {
for (WorldGroup worldGroup : getGroupsForWorld(worldName)) {
if (checkingGroup.equals(worldGroup)) {
continue;
Expand All @@ -200,8 +208,8 @@ public List<GroupingConflict> checkGroups() {
Shares conflictingShares = worldGroup.getShares()
.compare(checkingGroup.getShares());
if (!conflictingShares.isEmpty()) {
if (checkingGroup.getWorlds().containsAll(worldGroup.getWorlds())
|| worldGroup.getWorlds().containsAll(checkingGroup.getWorlds())) {
if (checkingGroup.getApplicableWorlds().containsAll(worldGroup.getApplicableWorlds())
|| worldGroup.getApplicableWorlds().containsAll(checkingGroup.getApplicableWorlds())) {
continue;
}
conflicts.add(new GroupingConflict(checkingGroup, worldGroup,
Expand Down Expand Up @@ -243,4 +251,31 @@ public void checkForConflicts(MVCommandIssuer issuer) {
public void recalculateApplicableShares() {
getGroupNames().values().forEach(WorldGroup::recalculateApplicableShares);
}

@Override
public void recalculateApplicableWorlds() {
groupNamesMap.values().forEach(WorldGroup::recalculateApplicableWorlds);
}

private class WorldChangeListener implements Listener {
@EventHandler
void onMVWorldLoad(MVWorldLoadedEvent event) {
groupNamesMap.values().forEach(group -> group.addApplicableWorld(event.getWorld().getName()));
}

@EventHandler
void onMVWorldUnload(MVWorldUnloadedEvent event) {
groupNamesMap.values().forEach(group -> group.removeApplicableWorld(event.getWorld().getName()));
}

@EventHandler
void onWorldLoad(WorldLoadEvent event) {
groupNamesMap.values().forEach(group -> group.addApplicableWorld(event.getWorld().getName()));
}

@EventHandler
void onWorldUnload(WorldUnloadEvent event) {
groupNamesMap.values().forEach(group -> group.removeApplicableWorld(event.getWorld().getName()));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ public Shares getConflictingShares() {
*/
public List<String> getConflictingWorlds() {
List<String> worlds = new ArrayList<String>();
for (String world : this.getFirstGroup().getWorlds()) {
if (this.getSecondGroup().getWorlds().contains(world)) {
for (String world : this.getFirstGroup().getApplicableWorlds()) {
if (this.getSecondGroup().getApplicableWorlds().contains(world)) {
worlds.add(world);
}
}
Expand Down
Loading