diff --git a/src/main/java/org/mvplugins/multiverse/core/command/MVCommandCompletions.java b/src/main/java/org/mvplugins/multiverse/core/command/MVCommandCompletions.java index 32e7a4521..71acc4e50 100644 --- a/src/main/java/org/mvplugins/multiverse/core/command/MVCommandCompletions.java +++ b/src/main/java/org/mvplugins/multiverse/core/command/MVCommandCompletions.java @@ -44,9 +44,9 @@ import org.mvplugins.multiverse.core.destination.DestinationInstance; import org.mvplugins.multiverse.core.destination.DestinationSuggestionPacket; import org.mvplugins.multiverse.core.destination.DestinationsProvider; +import org.mvplugins.multiverse.core.destination.core.WorldDestination; import org.mvplugins.multiverse.core.permissions.CorePermissionsChecker; import org.mvplugins.multiverse.core.utils.REPatterns; -import org.mvplugins.multiverse.core.utils.StringFormatter; import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld; import org.mvplugins.multiverse.core.world.MultiverseWorld; import org.mvplugins.multiverse.core.world.WorldManager; @@ -236,6 +236,9 @@ private Collection suggestDestinations(BukkitCommandCompletionContext co private Collection suggestDestinationsWithPerms(CommandSender teleporter, List teleportees, String deststring) { return destinationsProvider.suggestDestinations(teleporter, deststring).stream() + .filter(packet -> !config.getSimplifiedDestinationTabCompletion() + || packet.destination() instanceof WorldDestination + || deststring.startsWith(packet.destination().getIdentifier() + ":")) .filter(packet -> corePermissionsChecker .checkDestinationPacketPermission(teleporter, teleportees, packet)) .map(DestinationSuggestionPacket::parsableString) diff --git a/src/main/java/org/mvplugins/multiverse/core/config/CoreConfig.java b/src/main/java/org/mvplugins/multiverse/core/config/CoreConfig.java index 70bfb706e..c9f2fbb9a 100644 --- a/src/main/java/org/mvplugins/multiverse/core/config/CoreConfig.java +++ b/src/main/java/org/mvplugins/multiverse/core/config/CoreConfig.java @@ -8,16 +8,13 @@ import com.dumptruckman.minecraft.util.Logging; import io.vavr.control.Try; import jakarta.inject.Inject; -import jakarta.inject.Provider; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.event.EventPriority; -import org.bukkit.plugin.PluginManager; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jvnet.hk2.annotations.Service; import org.mvplugins.multiverse.core.MultiverseCore; -import org.mvplugins.multiverse.core.command.MVCommandManager; import org.mvplugins.multiverse.core.command.queue.ConfirmMode; import org.mvplugins.multiverse.core.config.handle.CommentedConfigurationHandle; import org.mvplugins.multiverse.core.config.handle.StringPropertyHandle; @@ -28,7 +25,6 @@ import org.mvplugins.multiverse.core.config.migration.action.MoveMigratorAction; import org.mvplugins.multiverse.core.config.migration.VersionMigrator; import org.mvplugins.multiverse.core.config.migration.action.SetMigratorAction; -import org.mvplugins.multiverse.core.destination.DestinationsProvider; import org.mvplugins.multiverse.core.teleportation.PassengerMode; import org.mvplugins.multiverse.core.teleportation.PassengerModes; import org.mvplugins.multiverse.core.world.helpers.DimensionFinder.DimensionFormat; @@ -539,6 +535,16 @@ public boolean getResolveAliasName() { return configHandle.get(configNodes.resolveAliasName); } + @ApiStatus.AvailableSince("5.4") + public Try setSimplifiedDestinationTabCompletion(boolean simplifiedDestinationTabCompletion) { + return configHandle.set(configNodes.simplifiedDestinationTabCompletion, simplifiedDestinationTabCompletion); + } + + @ApiStatus.AvailableSince("5.4") + public boolean getSimplifiedDestinationTabCompletion() { + return configHandle.get(configNodes.simplifiedDestinationTabCompletion); + } + /** * {@inheritDoc} */ diff --git a/src/main/java/org/mvplugins/multiverse/core/config/CoreConfigNodes.java b/src/main/java/org/mvplugins/multiverse/core/config/CoreConfigNodes.java index 9a57f983c..3bf86be34 100644 --- a/src/main/java/org/mvplugins/multiverse/core/config/CoreConfigNodes.java +++ b/src/main/java/org/mvplugins/multiverse/core/config/CoreConfigNodes.java @@ -413,6 +413,15 @@ private N node(N node) { .name("resolve-alias-name") .build()); + final ConfigNode simplifiedDestinationTabCompletion = node(ConfigNode.builder("command.simplified-destination-tab-completion", Boolean.class) + .comment("") + .comment("If this is set to true, Multiverse will only suggest simple destination formats in tab completion.") + .comment("This means only world names will be suggested without other destination type such as `e:worldname:x,y,z` or `p:playername`.") + .comment("Note: This DOES NOT prevent players from using the destinations, as that is controlled by permissions.") + .defaultValue(false) + .name("simplified-destination-tab-completion") + .build()); + final ConfigNode confirmMode = node(ConfigNode.builder("command.confirm-mode", ConfirmMode.class) .comment("") .comment("This config option defines whether `/mv confirm` is needed before running a DANGEROUS action.") diff --git a/src/test/resources/configs/fresh_config.yml b/src/test/resources/configs/fresh_config.yml index 0df83a617..b258b7de4 100644 --- a/src/test/resources/configs/fresh_config.yml +++ b/src/test/resources/configs/fresh_config.yml @@ -41,6 +41,7 @@ messaging: command: resolve-alias-name: true + simplified-destination-tab-completion: false confirm-mode: enable use-confirm-otp: true confirm-timeout: 30