Skip to content

Commit eb6f19e

Browse files
authored
Merge pull request #17 from Innectic/feature/default-group
Feature/default group
2 parents 9b23c6e + 935ef09 commit eb6f19e

File tree

7 files changed

+96
-26
lines changed

7 files changed

+96
-26
lines changed

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

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,29 +55,34 @@ public class PermissifyConstants {
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";
5757
public static final String PERMISSIFY_PLAYER_SET_MAIN_GROUP = "permissify.player.group.setmain";
58+
public static final String PERMISSIFY_GROUP_DEFAULT = "permissify.group.default";
5859
public static final String PERMISSIFY_FORMAT = "permissify.format";
5960
public static final String PERMISSIFY_CACHE = "permissify.cache";
6061
public static final String PERMISSIFY_ADMIN = "permissify.admin";
6162

6263
public static final String INSUFFICIENT_PERMISSIONS = PERMISSIFY_PREFIX + "&c&lInsufficient permissions!";
6364

64-
public static final String GROUP_CREATED = PERMISSIFY_PREFIX + "&c&lGroup <GROUP> has been created!";
65-
public static final String GROUP_REMOVED = PERMISSIFY_PREFIX + "&c&lGroup <GROUP> has been removed!";
66-
public static final String GROUP_PERMISSIONS = PERMISSIFY_PREFIX + "&c&lPermissions for <GROUP>: <PERMISSIONS>";
67-
public static final String GROUP_LIST = PERMISSIFY_PREFIX + "&c&lRegistered groups: <GROUPS>";
68-
public static final String PLAYER_GROUP_LIST = PERMISSIFY_PREFIX + "&c&lGroups for <PLAYER>: <GROUPS>";
69-
public static final String CACHE_PURGED = PERMISSIFY_PREFIX + "&e&lCache has been cleared!";
65+
public static final String GROUP_CREATED = PERMISSIFY_PREFIX + "&e&lGroup <GROUP> has been created!";
66+
public static final String GROUP_REMOVED = PERMISSIFY_PREFIX + "&e&lGroup <GROUP> has been removed!";
67+
public static final String GROUP_PERMISSIONS = PERMISSIFY_PREFIX + "&e&lPermissions for <GROUP>: <PERMISSIONS>";
68+
public static final String GROUP_LIST = PERMISSIFY_PREFIX + "&e&lRegistered groups: <GROUPS>";
69+
public static final String PLAYER_GROUP_LIST = PERMISSIFY_PREFIX + "&e&lGroups for <PLAYER>: <GROUPS>";
70+
public static final String CACHE_PURGED = PERMISSIFY_PREFIX + "&e&lCache has been purged!";
7071

71-
public static final String PERMISSION_ADDED_GROUP = PERMISSIFY_PREFIX + "&c&lPermission <PERMISSION> has been added to <GROUP>!";
72-
public static final String PERMISSION_REMOVED_GROUP = PERMISSIFY_PREFIX + "&c&lPermission <PERMISSION> has been removed from <GROUP>!";
72+
public static final String PERMISSION_ADDED_GROUP = PERMISSIFY_PREFIX + "&e&lPermission <PERMISSION> has been added to <GROUP>!";
73+
public static final String PERMISSION_REMOVED_GROUP = PERMISSIFY_PREFIX + "&e&lPermission <PERMISSION> has been removed from <GROUP>!";
7374

74-
public static final String PERMISSION_ADDED_PLAYER = PERMISSIFY_PREFIX + "&c&lPermission <PERMISSION> has been added to <PLAYER>!";
75-
public static final String PERMISSION_REMOVED_PLAYER = PERMISSIFY_PREFIX + "&c&lPermission <PERMISSION> has been removed from <PLAYER>!";
76-
public static final String PLAYER_ADDED_TO_GROUP = PERMISSIFY_PREFIX + "&c&lAdded <PLAYER> to <GROUP>";
77-
public static final String PLAYER_REMOVED_FROM_GROUP = PERMISSIFY_PREFIX + "&c&lRemoved <PLAYER> from <GROUP>";
75+
public static final String PERMISSION_ADDED_PLAYER = PERMISSIFY_PREFIX + "&e&lPermission <PERMISSION> has been added to <PLAYER>!";
76+
public static final String PERMISSION_REMOVED_PLAYER = PERMISSIFY_PREFIX + "&e&lPermission <PERMISSION> has been removed from <PLAYER>!";
77+
public static final String PLAYER_ADDED_TO_GROUP = PERMISSIFY_PREFIX + "&e&lAdded <PLAYER> to <GROUP>";
78+
public static final String PLAYER_REMOVED_FROM_GROUP = PERMISSIFY_PREFIX + "&e&lRemoved <PLAYER> from <GROUP>";
7879
public static final String FORMATTER_SET = PERMISSIFY_PREFIX + "&e&lFormatter <FORMATTER> set!";
7980
public static final String MAIN_GROUP_SET = PERMISSIFY_PREFIX + "&e&lSet main group for <PLAYER> to <GROUP>!";
8081

82+
public static final String EMPTY_DEFAULT_GROUP_NAME = "&c&lNONE";
83+
public static final String DEFAULT_GROUP_RESPONSE = PERMISSIFY_PREFIX + "&e&lThe current default group is '<GROUP>&e&l'.";
84+
public static final String DEFAULT_GROUP_SET = PERMISSIFY_PREFIX + "&e&lThe default group has been set to '<GROUP>&e&l'.";
85+
8186
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]";
8287
public static final String NOT_ENOUGH_ARGUMENTS_GROUP_REMOVE = PERMISSIFY_PREFIX + "&c&lNot enough arguments! &e&l/permissify group remove [name]";
8388
public static final String NOT_ENOUGH_ARGUMENTS_GROUP_PERMISSION_ADD = PERMISSIFY_PREFIX + "&c&lNot enough arguments! &e&l/permissify group addpermission [name] [permission]";
@@ -94,12 +99,12 @@ public class PermissifyConstants {
9499
public static final String NOT_ENOUGH_ARGUMENTS_SET_MAIN_GROUP = PERMISSIFY_PREFIX + "&c&lNot enough arguments! &e&l/permissify player setmain [player] [group]";
95100

96101
public static final String INVALID_CHATCOLOR = PERMISSIFY_PREFIX + "&c&lInvalid chat color <COLOR>";
97-
public static final String INVALID_GROUP = PERMISSIFY_PREFIX + "&c&lInvalid group!";
102+
public static final String INVALID_GROUP = PERMISSIFY_PREFIX + "&c&lInvalid group '<GROUP>'!";
98103
public static final String CONSOLE_INVALID_COMMAND = PERMISSIFY_PREFIX + "&c&lOnly one console command available: /permissify superadmin [username]";
99104
public static final String INVALID_PLAYER = PERMISSIFY_PREFIX + "&c&lInvalid player!";
100105
public static final String INVALID_ARGUMENT = PERMISSIFY_PREFIX + "&c&lInvalid argument: <ARGUMENT>";
101106

102-
public static final String PLAYER_NOT_IN_GROUP = PERMISSIFY_PREFIX + "&e&l<PLAYER> isn't in the group <GROUP>!";
107+
public static final String PLAYER_NOT_IN_GROUP = PERMISSIFY_PREFIX + "&c&l<PLAYER> isn't in the group <GROUP>!";
103108

104109
public static final String UNABLE_TO_CREATE = PERMISSIFY_PREFIX + "&c&lUnable to create <TYPE>: <REASON>";
105110
public static final String UNABLE_TO_REMOVE = PERMISSIFY_PREFIX + "&c&lUnable to remove <TYPE>: <REASON>";

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
package me.innectic.permissify.api.database;
2626

2727
import lombok.Getter;
28+
import lombok.Setter;
2829
import me.innectic.permissify.api.permission.Permission;
2930
import me.innectic.permissify.api.permission.PermissionGroup;
3031

@@ -40,8 +41,9 @@ public abstract class DatabaseHandler {
4041

4142
@Getter protected Map<UUID, Map<String, Boolean>> cachedPermissions = new HashMap<>();
4243
@Getter protected List<PermissionGroup> cachedGroups = new ArrayList<>();
44+
@Getter protected Optional<PermissionGroup> defaultGroup = Optional.empty();
45+
@Getter protected final Optional<ConnectionInformation> connectionInformation;
4346
protected List<UUID> superAdmins = new ArrayList<>();
44-
protected final Optional<ConnectionInformation> connectionInformation;
4547
protected String chatFormat = "{group} {username}: {message}";
4648
protected String whisperFormat = "{senderGroup} {username} > {receiverGroup} {to}: {message}";
4749

@@ -253,4 +255,11 @@ public DatabaseHandler(ConnectionInformation connectionInformation) {
253255
* @return the format
254256
*/
255257
public abstract String getWhisperFormat(boolean skipCache);
258+
259+
/**
260+
* Set the default permission group to the one provided.
261+
*
262+
* @param group the new group to become the default.
263+
*/
264+
public abstract void setDefaultGroup(PermissionGroup group);
256265
}

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ public void clear(List<UUID> onlinePlayers) {
128128
groupMembersResults.close();
129129
groupMembersStatement.close();
130130
cachedGroups.add(group);
131+
if (groupResults.getBoolean("defaultGroup")) defaultGroup = Optional.of(group);
131132
}
132133
groupStatement.close();
133134
groupResults.close();
@@ -651,4 +652,29 @@ public String getWhisperFormat(boolean skipCache) {
651652
}
652653
return "";
653654
}
655+
656+
@Override
657+
public void setDefaultGroup(PermissionGroup group) {
658+
defaultGroup = Optional.of(group);
659+
660+
Optional<Connection> connection = getConnection();
661+
if (!connection.isPresent()) {
662+
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
663+
return;
664+
}
665+
try {
666+
PreparedStatement removeDefaultsStatement = connection.get().prepareStatement("UPDATE groups SET defaultGroup=FALSE WHERE defaultGroup=TRUE");
667+
removeDefaultsStatement.execute();
668+
removeDefaultsStatement.close();
669+
670+
PreparedStatement setDefaultStatement = connection.get().prepareStatement("UPDATE groups SET defaultGroup=? WHERE name=?");
671+
setDefaultStatement.setBoolean(1, true);
672+
setDefaultStatement.setString(2, group.getName());
673+
setDefaultStatement.execute();
674+
setDefaultStatement.close();
675+
connection.get().close();
676+
} catch (SQLException e) {
677+
e.printStackTrace();
678+
}
679+
}
654680
}

Spigot/src/main/java/me/innectic/permissify/spigot/commands/PermissifyCommand.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,19 +87,21 @@ public boolean onCommand(CommandSender sender, Command command, String s, String
8787
}
8888
if (args[0].equalsIgnoreCase("group")) {
8989
CommandResponse response;
90-
if (args[1].equalsIgnoreCase("create") || args[1].equalsIgnoreCase("add")) {
90+
if (args[1].equalsIgnoreCase("create") || args[1].equalsIgnoreCase("add"))
9191
response = plugin.getGroupCommand().handleAddGroup(player, ArgumentUtil.getRemainingArgs(2, args));
92-
} else if (args[1].equalsIgnoreCase("remove") || args[1].equalsIgnoreCase("delete")) {
92+
else if (args[1].equalsIgnoreCase("remove") || args[1].equalsIgnoreCase("delete"))
9393
response = plugin.getGroupCommand().handleDeleteGroup(player, ArgumentUtil.getRemainingArgs(2, args));
94-
} else if (args[1].equalsIgnoreCase("addpermission")) {
94+
else if (args[1].equalsIgnoreCase("addpermission"))
9595
response = plugin.getGroupCommand().handlePermissionAdd(player, ArgumentUtil.getRemainingArgs(2, args));
96-
} else if (args[1].equalsIgnoreCase("removepermission")) {
96+
else if (args[1].equalsIgnoreCase("removepermission"))
9797
response = plugin.getGroupCommand().handlePermissionRemove(player, ArgumentUtil.getRemainingArgs(2, args));
98-
} else if (args[1].equalsIgnoreCase("list")) {
98+
else if (args[1].equalsIgnoreCase("list"))
9999
response = plugin.getGroupCommand().handleListGroups(player, ArgumentUtil.getRemainingArgs(2, args));
100-
} else if (args[1].equalsIgnoreCase("listpermissions")) {
100+
else if (args[1].equalsIgnoreCase("listpermissions"))
101101
response = plugin.getGroupCommand().handleListPermissions(player, ArgumentUtil.getRemainingArgs(2, args));
102-
} else {
102+
else if (args[1].equalsIgnoreCase("default"))
103+
response = plugin.getGroupCommand().handleSetDefault(player, ArgumentUtil.getRemainingArgs(2, args));
104+
else {
103105
sendHelp(player);
104106
return;
105107
}

Spigot/src/main/java/me/innectic/permissify/spigot/commands/permissify/GroupCommand.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
*/
2525
package me.innectic.permissify.spigot.commands.permissify;
2626

27+
import me.innectic.permissify.api.database.DatabaseHandler;
2728
import me.innectic.permissify.spigot.PermissifyMain;
2829
import me.innectic.permissify.spigot.commands.CommandResponse;
2930
import me.innectic.permissify.api.PermissifyConstants;
@@ -33,6 +34,7 @@
3334
import me.innectic.permissify.spigot.utils.ColorUtil;
3435
import me.innectic.permissify.spigot.utils.PermissionUtil;
3536
import org.bukkit.Bukkit;
37+
import org.bukkit.ChatColor;
3638
import org.bukkit.command.CommandSender;
3739
import org.bukkit.entity.Player;
3840

@@ -145,7 +147,7 @@ public CommandResponse handleListPermissions(CommandSender sender, String[] args
145147
if (args.length < 1) return new CommandResponse(PermissifyConstants.NOT_ENOUGH_ARGUMENTS_GROUP_PERMISSION_LIST, false);
146148
Optional<PermissionGroup> group = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroups().stream()
147149
.filter(permissionGroup -> permissionGroup.getName().equals(args[0])).findFirst();
148-
if (!group.isPresent()) return new CommandResponse(PermissifyConstants.INVALID_GROUP, false);
150+
if (!group.isPresent()) return new CommandResponse(PermissifyConstants.INVALID_GROUP.replace("<GROUP>", args[0]), false);
149151
List<String> groupPermissions = group.get().getPermissions().stream().map(Permission::getPermission).collect(Collectors.toList());
150152
return new CommandResponse(PermissifyConstants.GROUP_PERMISSIONS.replace("<GROUP>", group.get().getName())
151153
.replace("<PERMISSIONS>", String.join(", ", groupPermissions)), true);
@@ -161,4 +163,25 @@ public CommandResponse handleListGroups(CommandSender sender, String[] args) {
161163
List<String> groupNames = groups.stream().map(PermissionGroup::getName).collect(Collectors.toList());
162164
return new CommandResponse(PermissifyConstants.GROUP_LIST.replace("<GROUPS>", String.join(", ", groupNames)), true);
163165
}
166+
167+
public CommandResponse handleSetDefault(CommandSender sender, String[] args) {
168+
PermissifyMain plugin = PermissifyMain.getInstance();
169+
if (!PermissionUtil.hasPermissionOrSuperAdmin((Player) sender, PermissifyConstants.PERMISSIFY_GROUP_DEFAULT))
170+
return new CommandResponse(PermissifyConstants.INSUFFICIENT_PERMISSIONS, false);
171+
if (!plugin.getPermissifyAPI().getDatabaseHandler().isPresent())
172+
return new CommandResponse(PermissifyConstants.UNABLE_TO_SET.replace("<REASON>", "No database handler"), false);
173+
DatabaseHandler handler = plugin.getPermissifyAPI().getDatabaseHandler().get();
174+
if (args.length < 1) {
175+
// If we only have one, show the default group.
176+
String defaultGroupName = handler.getDefaultGroup().map(group -> ChatColor.getByChar(group.getChatColor()) + group.getName())
177+
.orElse(PermissifyConstants.EMPTY_DEFAULT_GROUP_NAME);
178+
String response = PermissifyConstants.DEFAULT_GROUP_RESPONSE.replace("<GROUP>", defaultGroupName);
179+
return new CommandResponse(response, true);
180+
}
181+
Optional<PermissionGroup> defaultGroup = handler.getGroup(args[0]);
182+
if (!defaultGroup.isPresent())
183+
return new CommandResponse(PermissifyConstants.INVALID_GROUP.replace("<GROUP>", args[0]), false);
184+
handler.setDefaultGroup(defaultGroup.get());
185+
return new CommandResponse(PermissifyConstants.DEFAULT_GROUP_SET.replace("<GROUP>", args[0]), true);
186+
}
164187
}

Spigot/src/main/java/me/innectic/permissify/spigot/commands/permissify/PlayerCommand.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public CommandResponse handleAddPlayerToGroup(CommandSender sender, String[] arg
5959
OfflinePlayer targetPlayer = Bukkit.getPlayer(args[0]);
6060
if (targetPlayer == null || !targetPlayer.hasPlayedBefore()) return new CommandResponse(PermissifyConstants.INVALID_PLAYER, false);
6161
Optional<PermissionGroup> group = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroup(args[1]);
62-
if (!group.isPresent()) return new CommandResponse(PermissifyConstants.INVALID_GROUP, false);
62+
if (!group.isPresent()) return new CommandResponse(PermissifyConstants.INVALID_GROUP.replace("<GROUP>", args[1]), false);
6363
plugin.getPermissifyAPI().getDatabaseHandler().get().addPlayerToGroup(targetPlayer.getUniqueId(), group.get());
6464
if (targetPlayer.isOnline()) group.get().getPermissions().forEach(permission ->
6565
targetPlayer.getPlayer().addAttachment(plugin, permission.getPermission(), true));
@@ -78,7 +78,7 @@ public CommandResponse handleRemovePlayerFromGroup(CommandSender sender, String[
7878
OfflinePlayer targetPlayer = Bukkit.getPlayer(args[0]);
7979
if (targetPlayer == null || !targetPlayer.hasPlayedBefore()) return new CommandResponse(PermissifyConstants.INVALID_PLAYER, false);
8080
Optional<PermissionGroup> group = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroup(args[1]);
81-
if (!group.isPresent()) return new CommandResponse(PermissifyConstants.INVALID_GROUP, false);
81+
if (!group.isPresent()) return new CommandResponse(PermissifyConstants.INVALID_GROUP.replace("<GROUP>", args[1]), false);
8282
plugin.getPermissifyAPI().getDatabaseHandler().get().removePlayerFromGroup(targetPlayer.getUniqueId(), group.get());
8383
if (targetPlayer.isOnline()) group.get().getPermissions().forEach(permission ->
8484
targetPlayer.getPlayer().addAttachment(plugin, permission.getPermission(), false));
@@ -97,7 +97,7 @@ public CommandResponse handleSetMainGroup(CommandSender sender, String[] args) {
9797
OfflinePlayer player = Bukkit.getPlayer(args[0]);
9898
if (player == null || !player.hasPlayedBefore()) return new CommandResponse(PermissifyConstants.INVALID_PLAYER, false);
9999
Optional<PermissionGroup> group = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroup(args[1]);
100-
if (!group.isPresent()) return new CommandResponse(PermissifyConstants.INVALID_GROUP, false);
100+
if (!group.isPresent()) return new CommandResponse(PermissifyConstants.INVALID_GROUP.replace("<GROUP>", args[1]), false);
101101
if (!group.get().getPlayers().containsKey(player.getUniqueId()))
102102
return new CommandResponse(PermissifyConstants.PLAYER_NOT_IN_GROUP.replace("<PLAYER>", player.getName()).replace("<GROUP>", group.get().getName()), false);
103103
boolean groupSet = plugin.getPermissifyAPI().getDatabaseHandler().get().setPrimaryGroup(group.get(), player.getUniqueId());

Spigot/src/main/java/me/innectic/permissify/spigot/events/PlayerJoin.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ public void onPlayerJoinEvent(PlayerJoinEvent e) {
4646
if (player == null) return;
4747
// Set the permissions of the player
4848
PermissifyMain.getInstance().getPermissifyAPI().getDatabaseHandler().ifPresent(handler -> {
49+
// Check if the player should be in a default group.
50+
if (handler.getDefaultGroup().isPresent() && !handler.getDefaultGroup().get().hasPlayer(player.getUniqueId())) {
51+
handler.addPlayerToGroup(player.getUniqueId(), handler.getDefaultGroup().get());
52+
handler.setPrimaryGroup(handler.getDefaultGroup().get(), player.getUniqueId());
53+
}
4954
handler.updateCache(player.getUniqueId());
5055
List<Permission> permissions = handler.getPermissions(player.getUniqueId());
5156
// Add the permissions to the player

0 commit comments

Comments
 (0)