Add MiniMessage

This commit is contained in:
Frank van der Heijden 2021-08-03 02:07:39 +02:00
parent bb5c642f31
commit 083012abfe
No known key found for this signature in database
GPG key ID: B808721C2DD5B5B8
74 changed files with 1328 additions and 1078 deletions

View file

@ -1,10 +1,13 @@
group = rootProject.group + '.bukkit'
String rootDependencyDir = rootProject.group + '.dependencies'
String dependencyDir = group + '.dependencies'
version = rootProject.version
archivesBaseName = rootProject.name + '-Bukkit'
dependencies {
implementation "com.github.FrankHeijden.cloud:cloud-paper:${rootProject.cloudVersion}"
implementation 'net.kyori:adventure-api:4.8.1'
implementation 'net.kyori:adventure-platform-bukkit:4.0.0-SNAPSHOT'
implementation 'org.bstats:bstats-bukkit:2.2.1'
implementation project(":Common")
compileOnly 'com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT'
@ -19,4 +22,6 @@ processResources {
shadowJar {
relocate 'org.bstats', dependencyDir + '.bstats'
relocate 'net.kyori.adventure', rootDependencyDir + '.adventure'
relocate 'net.kyori.examination', rootDependencyDir + '.examination'
}

View file

@ -3,13 +3,18 @@ package net.frankheijden.serverutils.bukkit.commands;
import cloud.commandframework.Command;
import cloud.commandframework.CommandManager;
import cloud.commandframework.context.CommandContext;
import net.frankheijden.serverutils.bukkit.entities.BukkitCommandSender;
import net.frankheijden.serverutils.bukkit.entities.BukkitAudience;
import net.frankheijden.serverutils.bukkit.entities.BukkitPlugin;
import net.frankheijden.serverutils.common.commands.CommandPlugins;
import net.frankheijden.serverutils.common.config.MessageKey;
import net.frankheijden.serverutils.common.config.MessagesResource;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.minimessage.Template;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
public class BukkitCommandPlugins extends CommandPlugins<BukkitPlugin, Plugin, BukkitCommandSender> {
public class BukkitCommandPlugins extends CommandPlugins<BukkitPlugin, Plugin, BukkitAudience> {
public BukkitCommandPlugins(BukkitPlugin plugin) {
super(plugin);
@ -17,8 +22,8 @@ public class BukkitCommandPlugins extends CommandPlugins<BukkitPlugin, Plugin, B
@Override
protected void register(
CommandManager<BukkitCommandSender> manager,
Command.Builder<BukkitCommandSender> builder
CommandManager<BukkitAudience> manager,
Command.Builder<BukkitAudience> builder
) {
manager.command(builder
.flag(parseFlag("version"))
@ -26,26 +31,25 @@ public class BukkitCommandPlugins extends CommandPlugins<BukkitPlugin, Plugin, B
}
@Override
protected void handlePlugins(CommandContext<BukkitCommandSender> context) {
BukkitCommandSender sender = context.getSender();
protected void handlePlugins(CommandContext<BukkitAudience> context) {
BukkitAudience sender = context.getSender();
boolean hasVersionFlag = context.flags().contains("version");
MessagesResource messages = plugin.getMessagesResource();
handlePlugins(sender, plugin.getPluginManager().getPluginsSorted(), bukkitPlugin -> {
PluginDescriptionFile description = bukkitPlugin.getDescription();
String message = plugin.getMessagesResource().getMessage(
"serverutils.plugins.format",
"%plugin%", description.getName()
);
TextComponent.Builder builder = Component.text();
builder.append(messages.get(MessageKey.PLUGINS_FORMAT).toComponent(
Template.of("plugin", description.getName())
));
if (hasVersionFlag) {
message += plugin.getMessagesResource().getMessage(
"serverutils.plugins.version",
"%version%", description.getVersion()
);
builder.append(messages.get(MessageKey.PLUGINS_FORMAT).toComponent(
Template.of("version", description.getVersion())
));
}
return message;
return builder.build();
});
}
}

View file

@ -11,7 +11,8 @@ import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import dev.frankheijden.minecraftreflection.MinecraftReflectionVersion;
import net.frankheijden.serverutils.bukkit.entities.BukkitCommandSender;
import net.frankheijden.serverutils.bukkit.config.BukkitMessageKey;
import net.frankheijden.serverutils.bukkit.entities.BukkitAudience;
import net.frankheijden.serverutils.bukkit.entities.BukkitPlugin;
import net.frankheijden.serverutils.bukkit.managers.BukkitPluginManager;
import net.frankheijden.serverutils.bukkit.reflection.RCraftServer;
@ -20,17 +21,21 @@ import net.frankheijden.serverutils.bukkit.utils.ReloadHandler;
import net.frankheijden.serverutils.bukkit.utils.VersionReloadHandler;
import net.frankheijden.serverutils.common.commands.CommandServerUtils;
import net.frankheijden.serverutils.common.commands.arguments.PluginsArgument;
import net.frankheijden.serverutils.common.config.MessageKey;
import net.frankheijden.serverutils.common.config.MessagesResource;
import net.frankheijden.serverutils.common.entities.results.PluginResults;
import net.frankheijden.serverutils.common.utils.FormatBuilder;
import net.frankheijden.serverutils.common.utils.KeyValueComponentBuilder;
import net.frankheijden.serverutils.common.utils.ForwardFilter;
import net.frankheijden.serverutils.common.utils.ListBuilder;
import net.frankheijden.serverutils.common.utils.ListComponentBuilder;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.Template;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.PluginIdentifiableCommand;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
public class BukkitCommandServerUtils extends CommandServerUtils<BukkitPlugin, Plugin, BukkitCommandSender> {
public class BukkitCommandServerUtils extends CommandServerUtils<BukkitPlugin, Plugin, BukkitAudience> {
private static final Map<String, ReloadHandler> supportedConfigs;
@ -53,8 +58,8 @@ public class BukkitCommandServerUtils extends CommandServerUtils<BukkitPlugin, P
@Override
public void register(
CommandManager<BukkitCommandSender> manager,
cloud.commandframework.Command.Builder<BukkitCommandSender> builder
CommandManager<BukkitAudience> manager,
cloud.commandframework.Command.Builder<BukkitAudience> builder
) {
super.register(manager, builder);
@ -68,7 +73,7 @@ public class BukkitCommandServerUtils extends CommandServerUtils<BukkitPlugin, P
})
.map(Map.Entry::getKey)
.collect(Collectors.toList());
addArgument(CommandArgument.<BukkitCommandSender, String>ofType(String.class, "config")
addArgument(CommandArgument.<BukkitAudience, String>ofType(String.class, "config")
.manager(manager)
.withSuggestionsProvider((context, s) -> supportedConfigNames)
.build());
@ -88,36 +93,36 @@ public class BukkitCommandServerUtils extends CommandServerUtils<BukkitPlugin, P
.handler(this::handleReloadConfig));
}
private void handleEnablePlugin(CommandContext<BukkitCommandSender> context) {
BukkitCommandSender sender = context.getSender();
private void handleEnablePlugin(CommandContext<BukkitAudience> context) {
BukkitAudience sender = context.getSender();
List<Plugin> plugins = Arrays.asList(context.get("plugins"));
PluginResults<Plugin> result = plugin.getPluginManager().enablePlugins(plugins);
result.sendTo(sender, "enabl");
PluginResults<Plugin> enableResults = plugin.getPluginManager().enablePlugins(plugins);
sender.sendMessage(enableResults.toComponent(BukkitMessageKey.ENABLEPLUGIN));
}
private void handleDisablePlugin(CommandContext<BukkitCommandSender> context) {
BukkitCommandSender sender = context.getSender();
private void handleDisablePlugin(CommandContext<BukkitAudience> context) {
BukkitAudience sender = context.getSender();
List<Plugin> plugins = Arrays.asList(context.get("plugins"));
if (checkDependingPlugins(context, sender, plugins, "disableplugin")) {
return;
}
PluginResults<Plugin> result = plugin.getPluginManager().disablePlugins(plugins);
result.sendTo(sender, "disabl");
PluginResults<Plugin> disableResults = plugin.getPluginManager().disablePlugins(plugins);
sender.sendMessage(disableResults.toComponent(BukkitMessageKey.DISABLEPLUGIN));
}
private void handleReloadConfig(CommandContext<BukkitCommandSender> context) {
BukkitCommandSender sender = context.getSender();
private void handleReloadConfig(CommandContext<BukkitAudience> context) {
BukkitAudience sender = context.getSender();
String config = context.get("config");
MessagesResource messages = plugin.getMessagesResource();
ReloadHandler handler = supportedConfigs.get(config);
if (handler == null) {
plugin.getMessagesResource().sendMessage(
messages.get(BukkitMessageKey.RELOADCONFIG_NOT_EXISTS).sendTo(
sender,
"serverutils.reloadconfig.not_exists",
"%what%", config
Template.of("config", config)
);
return;
}
@ -127,37 +132,36 @@ public class BukkitCommandServerUtils extends CommandServerUtils<BukkitPlugin, P
int max = versionReloadHandler.getMinecraftVersionMaximum();
if (MinecraftReflectionVersion.MINOR > max) {
plugin.getMessagesResource().sendMessage(
messages.get(BukkitMessageKey.RELOADCONFIG_NOT_SUPPORTED).sendTo(
sender,
"serverutils.reloadconfig.not_supported",
"%what%", config
Template.of("config", config)
);
return;
}
}
String[] replacements = new String[]{ "%action%", "reload", "%what%", config };
ForwardFilter filter = new ForwardFilter(plugin.getChatProvider(), sender);
ForwardFilter filter = new ForwardFilter(sender);
filter.start(Bukkit.getLogger());
try {
handler.handle();
filter.stop(Bukkit.getLogger());
String path = "serverutils." + (filter.hasWarnings() ? "warning" : "success");
plugin.getMessagesResource().sendMessage(sender, path, replacements);
BukkitMessageKey key = filter.hasWarnings()
? BukkitMessageKey.RELOADCONFIG_WARNINGS
: BukkitMessageKey.RELOADCONFIG_SUCCESS;
plugin.getMessagesResource().get(key).sendTo(sender, Template.of("config", config));
} catch (Exception ex) {
filter.stop(Bukkit.getLogger());
ex.printStackTrace();
plugin.getMessagesResource().sendMessage(sender, "serverutils.error", replacements);
plugin.getMessagesResource().get(MessageKey.GENERIC_ERROR).sendTo(sender);
}
}
@Override
protected FormatBuilder createPluginInfo(
FormatBuilder builder,
Function<Consumer<ListBuilder<String>>, String> listBuilderFunction,
protected KeyValueComponentBuilder createPluginInfo(
KeyValueComponentBuilder builder,
Function<Consumer<ListComponentBuilder<String>>, Component> listBuilderFunction,
Plugin bukkitPlugin
) {
PluginDescriptionFile description = bukkitPlugin.getDescription();
@ -187,9 +191,9 @@ public class BukkitCommandServerUtils extends CommandServerUtils<BukkitPlugin, P
}
@Override
protected FormatBuilder createCommandInfo(
FormatBuilder builder,
Function<Consumer<ListBuilder<String>>, String> listBuilderFunction,
protected KeyValueComponentBuilder createCommandInfo(
KeyValueComponentBuilder builder,
Function<Consumer<ListComponentBuilder<String>>, Component> listBuilderFunction,
String commandName
) {
Command cmd = BukkitPluginManager.getCommand(commandName);

View file

@ -0,0 +1,41 @@
package net.frankheijden.serverutils.bukkit.config;
import java.util.Locale;
import net.frankheijden.serverutils.common.config.PlaceholderConfigKey;
public enum BukkitMessageKey implements PlaceholderConfigKey {
RELOADCONFIG_SUCCESS("reloadconfig.success"),
RELOADCONFIG_WARNINGS("reloadconfig.warnings"),
RELOADCONFIG_NOT_EXISTS("reloadconfig.not-exists"),
RELOADCONFIG_NOT_SUPPORTED("reloadconfig.not-supported"),
ENABLEPLUGIN("enableplugin"),
DISABLEPLUGIN("disableplugin"),
;
private final String path;
private final boolean hasPlaceholders;
BukkitMessageKey(String path) {
this(path, true);
}
BukkitMessageKey(String path, boolean hasPlaceholders) {
this.path = path;
this.hasPlaceholders = hasPlaceholders;
}
public static BukkitMessageKey fromPath(String path) {
return BukkitMessageKey.valueOf(path.replaceAll("\\.|-", "_").toUpperCase(Locale.ENGLISH));
}
@Override
public String getPath() {
return path;
}
@Override
public boolean hasPlaceholders() {
return hasPlaceholders;
}
}

View file

@ -0,0 +1,23 @@
package net.frankheijden.serverutils.bukkit.entities;
import net.frankheijden.serverutils.common.entities.ServerUtilsAudience;
import net.kyori.adventure.audience.Audience;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class BukkitAudience extends ServerUtilsAudience<CommandSender> {
public BukkitAudience(Audience audience, CommandSender source) {
super(audience, source);
}
@Override
public boolean isPlayer() {
return source instanceof Player;
}
@Override
public boolean hasPermission(String permission) {
return source.hasPermission(permission);
}
}

View file

@ -0,0 +1,39 @@
package net.frankheijden.serverutils.bukkit.entities;
import net.frankheijden.serverutils.bukkit.ServerUtils;
import net.frankheijden.serverutils.common.providers.ServerUtilsAudienceProvider;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.Component;
import org.bukkit.command.CommandSender;
public class BukkitAudienceProvider implements ServerUtilsAudienceProvider<CommandSender> {
private final BukkitAudiences audiences;
private final BukkitAudience consoleServerAudience;
/**
* Constructs a new BukkitAudienceProvider.
*/
public BukkitAudienceProvider(ServerUtils plugin, BukkitAudiences audiences) {
this.audiences = audiences;
this.consoleServerAudience = new BukkitAudience(
audiences.console(),
plugin.getServer().getConsoleSender()
);
}
@Override
public BukkitAudience getConsoleServerAudience() {
return this.consoleServerAudience;
}
@Override
public BukkitAudience get(CommandSender source) {
return new BukkitAudience(audiences.sender(source), source);
}
@Override
public void broadcast(Component component, String permission) {
audiences.filter(sender -> sender.hasPermission(permission)).sendMessage(component);
}
}

View file

@ -1,30 +0,0 @@
package net.frankheijden.serverutils.bukkit.entities;
import net.frankheijden.serverutils.common.providers.ChatProvider;
import net.frankheijden.serverutils.common.utils.HexUtils;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
public class BukkitChatProvider implements ChatProvider<BukkitCommandSender, CommandSender> {
@Override
public BukkitCommandSender getConsoleSender() {
return new BukkitCommandSender(Bukkit.getConsoleSender());
}
@Override
public BukkitCommandSender get(CommandSender source) {
return new BukkitCommandSender(source);
}
@Override
public String color(String str) {
return ChatColor.translateAlternateColorCodes('&', HexUtils.convertHexString(str));
}
@Override
public void broadcast(String permission, String message) {
Bukkit.broadcast(message, permission);
}
}

View file

@ -1,54 +0,0 @@
package net.frankheijden.serverutils.bukkit.entities;
import net.frankheijden.serverutils.common.entities.ServerCommandSender;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
* A wrap for a Bukkit CommandSender.
*/
public class BukkitCommandSender implements ServerCommandSender<CommandSender> {
private final CommandSender sender;
/**
* Constructs a new CommandSender instance.
* @param sender The sender to wrap.
*/
public BukkitCommandSender(CommandSender sender) {
this.sender = sender;
}
/**
* Sends a message to a CommandSender.
* @param message The message to send.
*/
@Override
public void sendMessage(String message) {
sender.sendMessage(message);
}
/**
* Checks if the CommandSender has a permission.
* @param permission The permission to check.
* @return Whether or not they have the permission.
*/
@Override
public boolean hasPermission(String permission) {
return sender.hasPermission(permission);
}
/**
* Whether or not the given instance is a player.
* @return Boolean true or false.
*/
@Override
public boolean isPlayer() {
return sender instanceof Player;
}
@Override
public CommandSender getSource() {
return sender;
}
}

View file

@ -4,26 +4,30 @@ import cloud.commandframework.bukkit.CloudBukkitCapabilities;
import cloud.commandframework.execution.CommandExecutionCoordinator;
import cloud.commandframework.paper.PaperCommandManager;
import java.io.File;
import java.util.Arrays;
import java.util.logging.Logger;
import net.frankheijden.serverutils.bukkit.ServerUtils;
import net.frankheijden.serverutils.bukkit.commands.BukkitCommandPlugins;
import net.frankheijden.serverutils.bukkit.commands.BukkitCommandServerUtils;
import net.frankheijden.serverutils.bukkit.config.BukkitMessageKey;
import net.frankheijden.serverutils.bukkit.listeners.BukkitPlayerListener;
import net.frankheijden.serverutils.bukkit.managers.BukkitPluginManager;
import net.frankheijden.serverutils.bukkit.managers.BukkitTaskManager;
import net.frankheijden.serverutils.common.entities.ServerUtilsPlugin;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitTask;
public class BukkitPlugin extends ServerUtilsPlugin<Plugin, BukkitTask, BukkitCommandSender, CommandSender, BukkitPluginDescription> {
public class BukkitPlugin extends ServerUtilsPlugin<Plugin, BukkitTask, BukkitAudience, CommandSender, BukkitPluginDescription> {
private final ServerUtils plugin;
private final BukkitPluginManager pluginManager;
private final BukkitTaskManager taskManager;
private final BukkitResourceProvider resourceProvider;
private final BukkitChatProvider chatProvider;
private final BukkitAudiences audiences;
private final BukkitAudienceProvider chatProvider;
private boolean registeredPluginsCommand;
/**
@ -35,19 +39,20 @@ public class BukkitPlugin extends ServerUtilsPlugin<Plugin, BukkitTask, BukkitCo
this.pluginManager = new BukkitPluginManager();
this.taskManager = new BukkitTaskManager();
this.resourceProvider = new BukkitResourceProvider(plugin);
this.chatProvider = new BukkitChatProvider();
this.audiences = BukkitAudiences.create(plugin);
this.chatProvider = new BukkitAudienceProvider(plugin, this.audiences);
this.registeredPluginsCommand = false;
}
@Override
protected PaperCommandManager<BukkitCommandSender> newCommandManager() {
PaperCommandManager<BukkitCommandSender> commandManager;
protected PaperCommandManager<BukkitAudience> newCommandManager() {
PaperCommandManager<BukkitAudience> commandManager;
try {
commandManager = new PaperCommandManager<>(
plugin,
CommandExecutionCoordinator.simpleCoordinator(),
chatProvider::get,
BukkitCommandSender::getSource
BukkitAudience::getSource
);
} catch (Exception ex) {
throw new RuntimeException(ex);
@ -91,7 +96,7 @@ public class BukkitPlugin extends ServerUtilsPlugin<Plugin, BukkitTask, BukkitCo
}
@Override
public BukkitChatProvider getChatProvider() {
public BukkitAudienceProvider getChatProvider() {
return chatProvider;
}
@ -110,8 +115,14 @@ public class BukkitPlugin extends ServerUtilsPlugin<Plugin, BukkitTask, BukkitCo
Bukkit.getPluginManager().registerEvents(new BukkitPlayerListener(this), plugin);
}
@Override
protected void disablePlugin() {
this.audiences.close();
}
@Override
protected void reloadPlugin() {
this.messagesResource.load(Arrays.asList(BukkitMessageKey.values()));
if (getConfigResource().getConfig().getBoolean("settings.disable-plugins-command")) {
if (registeredPluginsCommand) {
BukkitPluginManager.unregisterCommands("pl", "plugins");

View file

@ -1,6 +1,6 @@
package net.frankheijden.serverutils.bukkit.listeners;
import net.frankheijden.serverutils.bukkit.entities.BukkitCommandSender;
import net.frankheijden.serverutils.bukkit.entities.BukkitAudience;
import net.frankheijden.serverutils.bukkit.entities.BukkitPlugin;
import net.frankheijden.serverutils.common.listeners.PlayerListener;
import org.bukkit.event.EventHandler;
@ -10,7 +10,7 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.Plugin;
public class BukkitPlayerListener
extends PlayerListener<BukkitPlugin, Plugin, BukkitCommandSender>
extends PlayerListener<BukkitPlugin, Plugin, BukkitAudience>
implements Listener {
public BukkitPlayerListener(BukkitPlugin plugin) {

View file

@ -31,6 +31,7 @@ import net.frankheijden.serverutils.common.entities.results.Result;
import net.frankheijden.serverutils.common.entities.exceptions.InvalidPluginDescriptionException;
import net.frankheijden.serverutils.common.events.PluginEvent;
import net.frankheijden.serverutils.common.managers.AbstractPluginManager;
import net.kyori.adventure.text.minimessage.Template;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.PluginCommand;
@ -67,7 +68,9 @@ public class BukkitPluginManager extends AbstractPluginManager<Plugin, BukkitPlu
} catch (InvalidDescriptionException ex) {
return pluginResults.addResult(pluginId, Result.INVALID_DESCRIPTION);
} catch (UnknownDependencyException ex) {
return pluginResults.addResult(pluginId, Result.UNKNOWN_DEPENDENCY.arg(ex.getMessage()));
return pluginResults.addResult(pluginId, Result.UNKNOWN_DEPENDENCY,
Template.of("dependency", ex.getMessage())
);
} catch (InvalidPluginException ex) {
if (ex.getCause() instanceof IllegalArgumentException) {
IllegalArgumentException e = (IllegalArgumentException) ex.getCause();

View file

@ -1,8 +1,12 @@
{
"serverutils": {
"messages": {
"reloadconfig": {
"not_exists": "&cConfig &4%what% &cdoes not exist.",
"not_supported": "&cConfig &4%what% &cis not supported on your Minecraft version."
}
"success": "<dark_aqua>Successfully reloaded <aqua><config></aqua>!",
"warnings": "<red>There were warnings while reloading <dark_red><config></dark_red>, please check the console!",
"not-exists": "<red>Config <dark_red><config></dark_red> does not exist.",
"not-supported": "<red>Config <dark_red><config></dark_red> is not supported on your Minecraft version."
},
"disableplugin": "<dark_aqua>Successfully disabled <aqua><plugin></aqua>!",
"enableplugin": "<dark_aqua>Successfully enabled <aqua><plugin></aqua>!"
}
}