Skip to content

Commit de4050b

Browse files
committed
Whisper formatting
1 parent 79362a1 commit de4050b

File tree

7 files changed

+142
-6
lines changed

7 files changed

+142
-6
lines changed

API/src/main/java/me/innectic/permissify/api/PermissifyConstants.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public class PermissifyConstants {
5454
public static final String PERMISSIFY_PLAYER_GROUP_ADD = "permissify.player.group.add";
5555
public static final String PERMISSIFY_PLAYER_GROUP_REMOVE = "permissify.player.group.remove";
5656
public static final String PERMISSIFY_PLAYER_GROUP_LIST = "permissify.player.group.list";
57+
public static final String PERMISSIFY_FORMAT = "permissify.format";
5758

5859
public static final String INSUFFICIENT_PERMISSIONS = PERMISSIFY_PREFIX + "&c&lInsufficient permissions!";
5960

@@ -72,6 +73,8 @@ public class PermissifyConstants {
7273
public static final String PLAYER_ADDED_TO_GROUP = PERMISSIFY_PREFIX + "&c&lAdded <PLAYER> to <GROUP>";
7374
public static final String PLAYER_REMOVED_FROM_GROUP = PERMISSIFY_PREFIX + "&c&lRemoved <PLAYER> from <GROUP>";
7475

76+
public static final String FORMATTER_SET = PERMISSIFY_PREFIX + "&e&lFormatter <FORMATTER> set!";
77+
7578
public static final String NOT_ENOUGH_ARGUMENTS_GROUP_CREATE = PERMISSIFY_PREFIX + "&c&lNot enough arguments! &e&l/permissify group create [name] [prefix] [suffix] [chat-color]";
7679
public static final String NOT_ENOUGH_ARGUMENTS_GROUP_REMOVE = PERMISSIFY_PREFIX + "&c&lNot enough arguments! &e&l/permissify group remove [name]";
7780
public static final String NOT_ENOUGH_ARGUMENTS_GROUP_PERMISSION_ADD = PERMISSIFY_PREFIX + "&c&lNot enough arguments! &e&l/permissify group addpermission [name] [permission]";
@@ -84,17 +87,20 @@ public class PermissifyConstants {
8487
public static final String NOT_ENOUGH_ARGUMENTS_PLAYER_ADD_GROUP= PERMISSIFY_PREFIX + "&c&lNot enough arguments! &e&l/permissify player addgroup [group] [player]";
8588
public static final String NOT_ENOUGH_ARGUMENTS_PLAYER_REMOVE_GROUP= PERMISSIFY_PREFIX + "&c&lNot enough arguments! &e&l/permissify player removegroup [group] [player]";
8689
public static final String NOT_ENOUGH_ARGUMENTS_PLAYER_LIST_GROUP = PERMISSIFY_PREFIX + "&c&lNot enough arguments! &e&l/permissify player listgroup [player]";
90+
public static final String NOT_ENOUGH_ARGUMENTS_SET_FORMAT = PERMISSIFY_PREFIX + "&c&lNot enough arguments! &e&l/permissify format [whisper|chat] [format...]";
8791

8892
public static final String INVALID_CHATCOLOR = PERMISSIFY_PREFIX + "&c&lInvalid chat color <COLOR>";
8993
public static final String INVALID_GROUP = PERMISSIFY_PREFIX + "&c&lInvalid group!";
9094
public static final String CONSOLE_INVALID_COMMAND = PERMISSIFY_PREFIX + "&c&lOnly one console command available: /permissify superadmin [username]";
9195
public static final String INVALID_PLAYER = PERMISSIFY_PREFIX + "&c&lInvalid player!";
96+
public static final String INVALID_FORMATTER = PERMISSIFY_PREFIX + "&c&lInvalid argument: <ARGUMENT>";
9297

9398
public static final String UNABLE_TO_CREATE = PERMISSIFY_PREFIX + "&c&lUnable to create <TYPE>: <REASON>";
9499
public static final String UNABLE_TO_REMOVE = PERMISSIFY_PREFIX + "&c&lUnable to remove <TYPE>: <REASON>";
95100
public static final String UNABLE_TO_ADD = PERMISSIFY_PREFIX + "&c&lUnable to add: <REASON>";
96101
public static final String UNABLE_TO_LIST = PERMISSIFY_PREFIX + "&c&lUnable to list: <REASON>";
97102
public static final String UNABLE_OTHER = PERMISSIFY_PREFIX + "&c&lUnable to continue: <REASON>";
103+
public static final String UNABLE_TO_SET = PERMISSIFY_PREFIX + "&c&lUnable to set: <REASON>";
98104

99105
// Help response
100106
public static final List<String> PERMISSIFY_HELP = new ArrayList<>(Arrays.asList(

API/src/main/java/me/innectic/permissify/api/database/DatabaseHandler.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
*/
2525
package me.innectic.permissify.api.database;
2626

27+
import lombok.Getter;
2728
import me.innectic.permissify.api.permission.Permission;
2829
import me.innectic.permissify.api.permission.PermissionGroup;
2930

@@ -41,7 +42,8 @@ public abstract class DatabaseHandler {
4142
protected List<PermissionGroup> cachedGroups = new ArrayList<>();
4243
protected List<UUID> superAdmins = new ArrayList<>();
4344
protected final Optional<ConnectionInformation> connectionInformation;
44-
protected String chatFormat = "{group} {username}: {message}";
45+
@Getter protected String chatFormat = "{group} {username}: {message}";
46+
@Getter protected String whisperFormat = "{senderGroup} {username} > {receiverGroup} {to}: {message}";
4547

4648
public DatabaseHandler(ConnectionInformation connectionInformation) {
4749
this.connectionInformation = Optional.ofNullable(connectionInformation);
@@ -213,13 +215,15 @@ protected void displayError(ConnectionError error, Exception e) {
213215

214216
/**
215217
* Set the format for chat messages
218+
*
219+
* @param format the format for chat.
216220
*/
217221
public abstract void setChatFormat(String format);
218222

219223
/**
220-
* Get the format of chat.
224+
* Set the format of whispers
221225
*
222-
* @return the current format of chat
226+
* @param format the format for whispers.
223227
*/
224-
public abstract String getChatFormat();
228+
public abstract void setWhisperFormat(String format);
225229
}

API/src/main/java/me/innectic/permissify/api/database/handlers/MySQLHandler.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,24 @@ public void setChatFormat(String format) {
500500
}
501501

502502
@Override
503-
public String getChatFormat() {
504-
return chatFormat;
503+
public void setWhisperFormat(String format) {
504+
this.chatFormat = format;
505+
506+
Optional<Connection> connection = getConnection();
507+
if (!connection.isPresent()) {
508+
displayError(ConnectionError.REJECTED);
509+
return;
510+
}
511+
512+
try {
513+
PreparedStatement statement = connection.get().prepareStatement("UPDATE formatting SET format=? WHERE formatter=?");
514+
statement.setString(1, format);
515+
statement.setString(2, FormatterType.WHISPER.getUsageName());
516+
statement.execute();
517+
statement.close();
518+
connection.get().close();
519+
} catch (SQLException e) {
520+
displayError(ConnectionError.DATABASE_EXCEPTION, e);
521+
}
505522
}
506523
}

API/src/main/java/me/innectic/permissify/api/util/ChatFormatter.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,28 @@ public static String formatChat(UUID uuid, String username, String message) {
3232
return formatter.replace("{group}", group.get(0).getName())
3333
.replace("{username}", username).replace("{message}", message);
3434
}
35+
36+
/**
37+
* Format a whisper message
38+
*
39+
* @param senderUuid the uuid of the player who sent it
40+
* @param senderName the name of the player who sent it
41+
* @param receiverUuid the uuid of the receiver of the message
42+
* @param receiverName the name of the receiver of the message
43+
* @param message the message sent
44+
* @return the final formatted message
45+
*/
46+
public static String formatWhisper(UUID senderUuid, String senderName, UUID receiverUuid, String receiverName, String message) {
47+
if (!PermissifyAPI.get().isPresent()) return senderName + " > " + receiverName + ": " + message;
48+
if (!PermissifyAPI.get().get().getDatabaseHandler().isPresent()) return senderName + " > " + receiverName + ": " + message;
49+
DatabaseHandler handler = PermissifyAPI.get().get().getDatabaseHandler().get();
50+
51+
// TODO: Do something about primary groups that would be the "display" group
52+
List<PermissionGroup> senderGroups = handler.getGroups(senderUuid);
53+
List<PermissionGroup> receiverGroups = handler.getGroups(receiverUuid);
54+
String formatter = handler.getWhisperFormat();
55+
return formatter.replace("{senderGroup}", senderGroups.get(0).getName())
56+
.replace("{username}", senderName).replace("{message}", message)
57+
.replace("{to}", receiverName).replace("{receiverGroup}", receiverGroups.get(0).getName());
58+
}
3559
}

Spigot/src/main/java/me/innectic/permissify/spigot/PermissifyMain.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import me.innectic.permissify.api.database.handlers.FullHandler;
3333
import me.innectic.permissify.spigot.commands.permissify.GroupCommand;
3434
import me.innectic.permissify.spigot.commands.permissify.PlayerCommand;
35+
import me.innectic.permissify.spigot.events.PreProcess;
3536
import me.innectic.permissify.spigot.utils.ConfigVerifier;
3637
import org.bukkit.Bukkit;
3738
import org.bukkit.plugin.PluginManager;
@@ -120,5 +121,6 @@ private void registerListeners() {
120121
PluginManager pluginManager = Bukkit.getPluginManager();
121122
pluginManager.registerEvents(new PlayerJoin(), this);
122123
pluginManager.registerEvents(new PlayerChat(), this);
124+
pluginManager.registerEvents(new PreProcess(), this);
123125
}
124126
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package me.innectic.permissify.spigot.commands.permissify;
2+
3+
import me.innectic.permissify.api.PermissifyConstants;
4+
import me.innectic.permissify.api.util.ArgumentUtil;
5+
import me.innectic.permissify.spigot.PermissifyMain;
6+
import me.innectic.permissify.spigot.commands.CommandResponse;
7+
import org.bukkit.command.CommandSender;
8+
9+
/**
10+
* @author Innectic
11+
* @since 7/2/2017
12+
*/
13+
public class FormatCommand {
14+
15+
public CommandResponse handleSetFormat(CommandSender sender, String[] args) {
16+
if (args.length < 2) return new CommandResponse(PermissifyConstants.NOT_ENOUGH_ARGUMENTS_SET_FORMAT, false);
17+
if (args[0].equals("chat")) return handleSetChatFormat(sender, ArgumentUtil.getRemainingArgs(1, args));
18+
else if (args[0].equals("whisper")) return handleWhisperFormat(sender, ArgumentUtil.getRemainingArgs(1, args));
19+
return new CommandResponse(PermissifyConstants.INVALID_FORMATTER.replace("<ARGUMENT>", args[0]), true);
20+
}
21+
22+
private CommandResponse handleSetChatFormat(CommandSender sender, String[] args) {
23+
if (!PermissifyMain.getInstance().getPermissifyAPI().getDatabaseHandler().isPresent())
24+
return new CommandResponse(PermissifyConstants.UNABLE_TO_SET.replace("<REASON>", "No database handler"), false);
25+
String formatted = String.join(" ", args);
26+
PermissifyMain.getInstance().getPermissifyAPI().getDatabaseHandler().get().setChatFormat(formatted);
27+
return new CommandResponse(PermissifyConstants.INVALID_FORMATTER.replace("<FORMATTER>", "chat"), true);
28+
}
29+
30+
private CommandResponse handleWhisperFormat(CommandSender sender, String[] args) {
31+
if (!PermissifyMain.getInstance().getPermissifyAPI().getDatabaseHandler().isPresent())
32+
return new CommandResponse(PermissifyConstants.UNABLE_TO_SET.replace("<REASON>", "No database handler"), false);
33+
String formatted = String.join(" ", args);
34+
PermissifyMain.getInstance().getPermissifyAPI().getDatabaseHandler().get().setWhisperFormat(formatted);
35+
return new CommandResponse(PermissifyConstants.INVALID_FORMATTER.replace("<FORMATTER>", "whisper"), true);
36+
}
37+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package me.innectic.permissify.spigot.events;
2+
3+
import me.innectic.permissify.api.PermissifyConstants;
4+
import me.innectic.permissify.api.util.ArgumentUtil;
5+
import me.innectic.permissify.api.util.ChatFormatter;
6+
import me.innectic.permissify.spigot.PermissifyMain;
7+
import me.innectic.permissify.spigot.utils.ColorUtil;
8+
import org.bukkit.Bukkit;
9+
import org.bukkit.entity.Player;
10+
import org.bukkit.event.EventHandler;
11+
import org.bukkit.event.Listener;
12+
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
13+
14+
import java.util.Arrays;
15+
import java.util.HashSet;
16+
import java.util.Set;
17+
18+
/**
19+
* @author Innectic
20+
* @since 7/2/2017
21+
*/
22+
public class PreProcess implements Listener {
23+
24+
private Set<String> validWhisperCommands = new HashSet<>(Arrays.asList("/msg", "/whisper", "/tell"));
25+
26+
// @Return: Should this command's output not look like permissify ever touches it?
27+
28+
@EventHandler
29+
public void onCommandPreProcess(PlayerCommandPreprocessEvent e) {
30+
String command = e.getMessage();
31+
if (!validWhisperCommands.contains(command)) return;
32+
e.setCancelled(true);
33+
if (!PermissifyMain.getInstance().getPermissifyAPI().getDatabaseHandler().isPresent()) return;
34+
// We don't care about the command at the beginning
35+
String[] arguments = ArgumentUtil.getRemainingArgs(1, command.split(" "));
36+
Player player = Bukkit.getPlayer(arguments[0]);
37+
if (player == null) {
38+
e.getPlayer().sendMessage(PermissifyConstants.INVALID_PLAYER);
39+
return;
40+
}
41+
String message = String.join(" ", ArgumentUtil.getRemainingArgs(1, arguments));
42+
String formatted = ChatFormatter.formatWhisper(e.getPlayer().getUniqueId(), e.getPlayer().getName(), player.getUniqueId(), player.getName(), message);
43+
player.sendMessage(ColorUtil.makeReadable(formatted));
44+
e.getPlayer().sendMessage(ColorUtil.makeReadable(formatted));
45+
}
46+
}

0 commit comments

Comments
 (0)