Skip to content
This repository has been archived by the owner on Dec 17, 2022. It is now read-only.

Commit

Permalink
Introduce native chat format support
Browse files Browse the repository at this point in the history
Resolves #2
  • Loading branch information
BGM committed Apr 3, 2020
1 parent e975769 commit eda7781
Show file tree
Hide file tree
Showing 7 changed files with 218 additions and 1 deletion.
10 changes: 10 additions & 0 deletions Commons/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@
<id>bgm</id>
<url>https://bgmp.cl/</url>
</repository>
<repository>
<id>vault-repo</id>
<url>http://nexus.hc.to/content/repositories/pub_releases</url>
</repository>
</repositories>

<dependencies>
Expand Down Expand Up @@ -109,5 +113,11 @@
<artifactId>Utils-Bukkit</artifactId>
<version>1.15.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>net.milkbowl.vault</groupId>
<artifactId>VaultAPI</artifactId>
<version>1.6</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
88 changes: 88 additions & 0 deletions Commons/src/main/java/cl/bgmp/commons/Chat/ChatFormatter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package cl.bgmp.commons.Chat;

import cl.bgmp.commons.Commons;
import cl.bgmp.commons.Config;
import java.util.logging.Logger;
import net.milkbowl.vault.chat.Chat;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.server.ServiceRegisterEvent;
import org.bukkit.event.server.ServiceUnregisterEvent;

public class ChatFormatter implements Listener {

// Placeholder constants
private static final String NAME = "{name}";
private static final String DISPLAY_NAME = "{displayname}";
private static final String MESSAGE = "{message}";
private static final String PREFIX = "{prefix}";
private static final String SUFFIX = "{suffix}";
private static final String DEFAULT_FORMAT = "<" + PREFIX + NAME + SUFFIX + "> " + MESSAGE;

private String format;
private Chat vaultChat = null;
private Logger logger;

public ChatFormatter(Logger logger) {
if (!Config.ChatFormat.isEnabled()) return;
this.logger = logger;

reloadConfigValues();
refreshVault();
Commons.get().registerEvents(this);
}

public void reloadConfigValues() {
format =
cl.bgmp.utilsbukkit.Chat.colourify(
Config.ChatFormat.getFormat().replace(DISPLAY_NAME, "%1$s").replace(MESSAGE, "%2$s"));
}

public void refreshVault() {
Chat vaultChat = Bukkit.getServer().getServicesManager().load(Chat.class);
if (vaultChat != this.vaultChat)
logger.info(
"New Vault Chat implementation registered: "
+ (vaultChat == null ? "null" : vaultChat.getName()));
this.vaultChat = vaultChat;
}

@EventHandler
public void onServiceChange(ServiceRegisterEvent e) {
if (e.getProvider().getService() == Chat.class) {
refreshVault();
}
}

@EventHandler
public void onServiceChange(ServiceUnregisterEvent e) {
if (e.getProvider().getService() == Chat.class) {
refreshVault();
}
}

@EventHandler(priority = EventPriority.LOWEST)
public void onChatLow(AsyncPlayerChatEvent e) {
e.setFormat(format);
}

@EventHandler(priority = EventPriority.HIGHEST)
public void onChatHigh(AsyncPlayerChatEvent e) {
String format = e.getFormat();
if (vaultChat != null && format.contains(PREFIX)) {
format =
format.replace(
PREFIX, cl.bgmp.utilsbukkit.Chat.colourify(vaultChat.getPlayerPrefix(e.getPlayer())));
}
if (vaultChat != null && format.contains(SUFFIX)) {
format =
format.replace(
SUFFIX, cl.bgmp.utilsbukkit.Chat.colourify(vaultChat.getPlayerSuffix(e.getPlayer())));
}
format = format.replace(NAME, e.getPlayer().getName());
e.setFormat(format);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package cl.bgmp.commons.Commands;

import cl.bgmp.commons.Commons;
import com.sk89q.minecraft.util.commands.Command;
import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.minecraft.util.commands.CommandPermissions;
import com.sk89q.minecraft.util.commands.NestedCommand;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;

public class ChatFormatterCommand {
@Command(
aliases = {"reload"},
desc = "Chat format node command.",
max = 1)
@CommandPermissions("commons.chat.reload")
public static void reload(final CommandContext args, final CommandSender sender) {
Commons.get().getChatFormatter().refreshVault();
Commons.get().getChatFormatter().reloadConfigValues();

sender.sendMessage(ChatColor.GREEN + "Chat format successfully reloaded.");
}

public static class ChatFormatterParentCommand {
@Command(
aliases = {"chat", "chatformat"},
desc = "Chat format node command.",
max = 1)
@CommandPermissions("commons.chat")
@NestedCommand(ChatFormatterCommand.class)
public static void chat(final CommandContext args, final CommandSender sender) {}
}
}
66 changes: 66 additions & 0 deletions Commons/src/main/java/cl/bgmp/commons/Commons.java
Original file line number Diff line number Diff line change
@@ -1,34 +1,100 @@
package cl.bgmp.commons;

import cl.bgmp.commons.Chat.ChatFormatter;
import cl.bgmp.commons.Commands.ChatFormatterCommand;
import cl.bgmp.commons.Navigator.Navigator;
import cl.bgmp.utilsbukkit.Channels;
import cl.bgmp.utilsbukkit.Chat;
import com.sk89q.bukkit.util.BukkitCommandsManager;
import com.sk89q.bukkit.util.CommandsManagerRegistration;
import com.sk89q.minecraft.util.commands.ChatColor;
import com.sk89q.minecraft.util.commands.CommandException;
import com.sk89q.minecraft.util.commands.CommandPermissionsException;
import com.sk89q.minecraft.util.commands.CommandUsageException;
import com.sk89q.minecraft.util.commands.CommandsManager;
import com.sk89q.minecraft.util.commands.MissingNestedCommandException;
import com.sk89q.minecraft.util.commands.WrappedCommandException;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;

public final class Commons extends JavaPlugin {
private static Commons commons;
private Navigator navigator;
private ChatFormatter chatFormatter;
private CommandsManager commands;
private CommandsManagerRegistration commandRegistry;

public static Commons get() {
return commons;
}

public Navigator getNavigator() {
return navigator;
}

public ChatFormatter getChatFormatter() {
return chatFormatter;
}

@SuppressWarnings("unchecked")
@Override
public boolean onCommand(
@NotNull CommandSender sender,
Command command,
@NotNull String label,
@NotNull String[] args) {
try {
this.commands.execute(command.getName(), args, sender, sender);
} catch (CommandPermissionsException exception) {
sender.sendMessage(Chat.getStringAsException("You do not have permission"));
} catch (MissingNestedCommandException exception) {
sender.sendMessage(Chat.getStringAsException(exception.getUsage()));
} catch (CommandUsageException exception) {
sender.sendMessage(ChatColor.RED + exception.getMessage());
sender.sendMessage(ChatColor.RED + exception.getUsage());
} catch (WrappedCommandException exception) {
if (exception.getCause() instanceof NumberFormatException) {
sender.sendMessage(Chat.getStringAsException("Expected a number. Received string instead"));
} else {
sender.sendMessage(Chat.getStringAsException("An unknown error has occurred."));
exception.printStackTrace();
}
} catch (CommandException exception) {
sender.sendMessage(ChatColor.RED + exception.getMessage());
}
return true;
}

@Override
public void onEnable() {
commons = this;
loadConfiguration();

Channels.registerBungeeToPlugin(this);

navigator = new Navigator();
chatFormatter = new ChatFormatter(getLogger());

commands = new BukkitCommandsManager();
commandRegistry = new CommandsManagerRegistration(this, this.commands);

registerCommands();
registerEvents();
}

@Override
public void onDisable() {}

public void registerCommands() {
commandRegistry.register(ChatFormatterCommand.ChatFormatterParentCommand.class);
commandRegistry.register(ChatFormatterCommand.class);
}

public void registerEvents(Listener... listeners) {
final PluginManager pluginManager = Bukkit.getPluginManager();
for (Listener listener : listeners) pluginManager.registerEvents(listener, this);
Expand Down
15 changes: 15 additions & 0 deletions Commons/src/main/java/cl/bgmp/commons/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,19 @@ public static Set<ServerButton> getServerButtons() {
return ImmutableSet.copyOf(serverButtons);
}
}

private static final String chatPath = "chat";
private static final String vaultFormattingPath = chatPath + ".vault-formatting";
private static final String vaultFormattingEnabledPath = vaultFormattingPath + ".enabled";
private static final String vaultFormattingFormatPath = vaultFormattingPath + ".format";

public static class ChatFormat {
public static boolean isEnabled() {
return getConfig().getBoolean(vaultFormattingEnabledPath);
}

public static String getFormat() {
return getConfig().getString(vaultFormattingFormatPath);
}
}
}
4 changes: 4 additions & 0 deletions Commons/src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,7 @@ navigator:
lore:
- ""
- "&aOnline: %player_count%"
chat:
vault-formatting:
enabled: true
format: "<{prefix}{name}{suffix}> {message}"
3 changes: 2 additions & 1 deletion Commons/src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
name: Commons
version: ${project.version}
main: cl.bgmp.commons.Commons
api-version: 1.13
api-version: '1.13'
authors: [BGMP]
softdepend: [Vault]

0 comments on commit eda7781

Please sign in to comment.