diff --git a/paper-api/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java b/paper-api/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java index 2114651bd6..a399f87e92 100644 --- a/paper-api/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java +++ b/paper-api/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java @@ -1,6 +1,9 @@ package io.papermc.paper.plugin.configuration; import java.util.List; +import java.util.Locale; +import net.kyori.adventure.key.KeyPattern; +import net.kyori.adventure.key.Namespaced; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.PluginLoadOrder; @@ -14,7 +17,7 @@ import org.jspecify.annotations.Nullable; */ @NullMarked @ApiStatus.NonExtendable -public interface PluginMeta { +public interface PluginMeta extends Namespaced { /** * Provides the name of the plugin. This name uniquely identifies the plugin amongst all loaded plugins on the @@ -180,4 +183,10 @@ public interface PluginMeta { */ @Nullable String getAPIVersion(); + @KeyPattern.Namespace + @SuppressWarnings("PatternValidation") + @Override + default String namespace() { + return this.getName().toLowerCase(Locale.ROOT); + } } diff --git a/paper-api/src/main/java/org/bukkit/NamespacedKey.java b/paper-api/src/main/java/org/bukkit/NamespacedKey.java index 09cbe299a7..57d95e22db 100644 --- a/paper-api/src/main/java/org/bukkit/NamespacedKey.java +++ b/paper-api/src/main/java/org/bukkit/NamespacedKey.java @@ -72,7 +72,7 @@ public final class NamespacedKey implements Key, com.destroystokyo.paper.Namespa public NamespacedKey(@NotNull Plugin plugin, @NotNull String key) { Preconditions.checkArgument(plugin != null, "Plugin cannot be null"); Preconditions.checkArgument(key != null, "Key cannot be null"); - this.namespace = plugin.getName().toLowerCase(Locale.ROOT); + this.namespace = plugin.namespace(); this.key = key.toLowerCase(Locale.ROOT); // Check validity after normalization diff --git a/paper-api/src/main/java/org/bukkit/plugin/Plugin.java b/paper-api/src/main/java/org/bukkit/plugin/Plugin.java index 29ce61fce7..95d2ada67d 100644 --- a/paper-api/src/main/java/org/bukkit/plugin/Plugin.java +++ b/paper-api/src/main/java/org/bukkit/plugin/Plugin.java @@ -3,6 +3,7 @@ package org.bukkit.plugin; import java.io.File; import java.io.InputStream; import java.util.logging.Logger; +import net.kyori.adventure.key.Namespaced; import org.bukkit.Server; import org.bukkit.command.TabExecutor; import org.bukkit.configuration.file.FileConfiguration; @@ -16,7 +17,7 @@ import org.jetbrains.annotations.Nullable; *

* The use of {@link PluginBase} is recommended for actual Implementation */ -public interface Plugin extends TabExecutor, io.papermc.paper.plugin.lifecycle.event.LifecycleEventOwner { // Paper +public interface Plugin extends TabExecutor, io.papermc.paper.plugin.lifecycle.event.LifecycleEventOwner, Namespaced { // Paper /** * Returns the folder that the plugin data files are located in. The * folder may not yet exist. diff --git a/paper-api/src/main/java/org/bukkit/plugin/PluginBase.java b/paper-api/src/main/java/org/bukkit/plugin/PluginBase.java index e773db6da3..a3e4484d34 100644 --- a/paper-api/src/main/java/org/bukkit/plugin/PluginBase.java +++ b/paper-api/src/main/java/org/bukkit/plugin/PluginBase.java @@ -1,6 +1,7 @@ package org.bukkit.plugin; import org.jetbrains.annotations.NotNull; +import java.util.Locale; /** * Represents a base {@link Plugin} @@ -33,4 +34,10 @@ public abstract class PluginBase implements Plugin { public final String getName() { return getPluginMeta().getName(); // Paper } + + @Override + @NotNull + public String namespace() { + return this.getPluginMeta().namespace(); + } } diff --git a/paper-server/src/main/java/io/papermc/paper/command/brigadier/PaperCommands.java b/paper-server/src/main/java/io/papermc/paper/command/brigadier/PaperCommands.java index af480008ad..f37adc5dca 100644 --- a/paper-server/src/main/java/io/papermc/paper/command/brigadier/PaperCommands.java +++ b/paper-server/src/main/java/io/papermc/paper/command/brigadier/PaperCommands.java @@ -91,7 +91,7 @@ public class PaperCommands implements Commands, PaperRegistrar registerWithFlags(final PluginMeta pluginMeta, final LiteralCommandNode node, final @Nullable String description, final Collection aliases, final Set flags) { - return registerWithFlagsInternal(pluginMeta, pluginMeta.getName().toLowerCase(Locale.ROOT), null, node, description, aliases, flags); + return this.registerWithFlagsInternal(pluginMeta, pluginMeta.namespace(), null, node, description, aliases, flags); } public @Unmodifiable Set registerWithFlagsInternal(final @Nullable PluginMeta pluginMeta, final String namespace, final @Nullable String helpNamespaceOverride, final LiteralCommandNode node, final @Nullable String description, final Collection aliases, final Set flags) {