Skip to content

Commit 90126a3

Browse files
committed
Fix permission setting on player login
1 parent ac3b047 commit 90126a3

File tree

5 files changed

+38
-35
lines changed

5 files changed

+38
-35
lines changed

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ public abstract class DatabaseHandler {
4040

4141
@Getter protected Map<UUID, Map<String, Boolean>> cachedPermissions = new HashMap<>();
4242
@Getter protected List<PermissionGroup> cachedGroups = new ArrayList<>();
43-
@Getter protected List<String> groupNames = new ArrayList<>(); // This is probably redundant, but it allows for not loading
44-
// all the groups, and not making tons of queries
4543
protected List<UUID> superAdmins = new ArrayList<>();
4644
protected final Optional<ConnectionInformation> connectionInformation;
4745
protected String chatFormat = "{group} {username}: {message}";

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

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,31 @@ public void clear(List<UUID> onlinePlayers) {
103103
adminStatement.close();
104104

105105
// Load all group names
106-
PreparedStatement groupStatement = connection.get().prepareStatement("SELECT name from groups");
106+
PreparedStatement groupStatement = connection.get().prepareStatement("SELECT * from groups");
107107
ResultSet groupResults = groupStatement.executeQuery();
108108
while (groupResults.next()) {
109-
groupNames.add(groupResults.getString("name"));
109+
PermissionGroup group = new PermissionGroup(groupResults.getString("name"),
110+
groupResults.getString("chatcolor"),
111+
groupResults.getString("prefix"),
112+
groupResults.getString("suffix"));
113+
PreparedStatement groupPermissionsStatement = connection.get().prepareStatement("SELECT * FROM groupPermissions WHERE groupName=?");
114+
groupPermissionsStatement.setString(1, group.getName());
115+
ResultSet groupPermissionsResult = groupPermissionsStatement.executeQuery();
116+
while (groupPermissionsResult.next()) {
117+
group.addPermission(groupPermissionsResult.getString("permission"));
118+
}
119+
groupPermissionsResult.close();
120+
groupPermissionsStatement.close();
121+
122+
PreparedStatement groupMembersStatement = connection.get().prepareStatement("SELECT uuid,`primary` FROM groupMembers WHERE `group`=?");
123+
groupMembersStatement.setString(1, group.getName());
124+
ResultSet groupMembersResults = groupMembersStatement.executeQuery();
125+
while (groupMembersResults.next()) {
126+
group.addPlayer(UUID.fromString(groupMembersResults.getString("uuid")), groupMembersResults.getBoolean("primary"));
127+
}
128+
groupMembersResults.close();
129+
groupMembersStatement.close();
130+
cachedGroups.add(group);
110131
}
111132
groupStatement.close();
112133
groupResults.close();
@@ -215,9 +236,12 @@ public boolean hasPermission(UUID uuid, String permission) {
215236

216237
@Override
217238
public List<Permission> getPermissions(UUID uuid) {
218-
if (cachedPermissions.containsKey(uuid))
239+
if (cachedPermissions.containsKey(uuid)) {
240+
System.out.println("Found cached permissions for " + uuid);
219241
return cachedPermissions.get(uuid).entrySet().stream()
220242
.map(entry -> new Permission(entry.getKey(), entry.getValue())).collect(Collectors.toList());
243+
}
244+
System.out.println("No cache for " + uuid + " found. Getting.");
221245
Optional<Connection> connection = getConnection();
222246
List<Permission> permissions = new ArrayList<>();
223247

@@ -250,7 +274,6 @@ public boolean createGroup(String name, String prefix, String suffix, String cha
250274
if (cachedGroups.stream().anyMatch(group -> group.getName().equalsIgnoreCase(name))) return false;
251275
// Add the new group to the cache
252276
cachedGroups.add(new PermissionGroup(name, chatColor, prefix, suffix));
253-
groupNames.add(name);
254277

255278
Optional<Connection> connection = getConnection();
256279
if (!connection.isPresent()) {
@@ -280,7 +303,6 @@ public boolean deleteGroup(String name) {
280303
if (getGroups().stream().noneMatch(group -> group.getName().equalsIgnoreCase(name))) return false;
281304
// Delete from the cache
282305
cachedGroups.removeIf(group -> group.getName().equalsIgnoreCase(name));
283-
groupNames.removeIf(entry -> entry.equalsIgnoreCase(name));
284306

285307
Optional<Connection> connection = getConnection();
286308
if (!connection.isPresent()) {
@@ -302,32 +324,7 @@ public boolean deleteGroup(String name) {
302324

303325
@Override
304326
public Optional<PermissionGroup> getGroup(String name) {
305-
if (!groupNames.contains(name)) return Optional.empty();
306-
Optional<PermissionGroup> cached = cachedGroups.stream().filter(group -> group.getName().equalsIgnoreCase(name)).findFirst();
307-
if (cached.isPresent()) return cached;
308-
// Not a cached group, and it's a real group. Must be pulled from DB.
309-
Optional<Connection> connection = getConnection();
310-
if (!connection.isPresent()) {
311-
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
312-
return Optional.empty();
313-
}
314-
315-
try {
316-
PreparedStatement statement = connection.get().prepareStatement("SELECT * FROM groups WHERE name=?");
317-
statement.setString(1, name);
318-
ResultSet results = statement.executeQuery();
319-
if (results.next()) {
320-
PermissionGroup group = new PermissionGroup(results.getString("name"), results.getString("chatcolor"), results.getString("prefix"), results.getString("suffix"));
321-
cachedGroups.add(group);
322-
return Optional.of(group);
323-
}
324-
results.close();
325-
statement.close();
326-
connection.get().close();
327-
} catch (SQLException e) {
328-
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.of(e)));
329-
}
330-
return Optional.empty();
327+
return cachedGroups.stream().filter(group -> group.getName().equalsIgnoreCase(name)).findFirst();
331328
}
332329

333330
@Override

API/src/main/java/me/innectic/permissify/api/permission/PermissionGroup.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public class PermissionGroup {
5151
public void removePermission(String permission) {
5252
Optional<Permission> perm = permissions.stream().filter(groupPermission -> groupPermission.getPermission().equals(permission)).findFirst();
5353
perm.ifPresent(groupPermission -> groupPermission.setGranted(false));
54+
// TODO: Remove permissions from the player
5455
}
5556

5657
/**
@@ -62,6 +63,7 @@ public void addPermission(String permission) {
6263
Optional<Permission> perm = permissions.stream().filter(groupPermission -> groupPermission.getPermission().equals(permission)).findFirst();
6364
if (perm.isPresent()) perm.get().setGranted(true);
6465
else permissions.add(new Permission(permission, true));
66+
// TODO: Add permissions to the player
6567
}
6668

6769
public boolean hasPermission(String permission) {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public CommandResponse handleAddPlayerToGroup(CommandSender sender, String[] arg
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));
66+
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(targetPlayer.getUniqueId());
6667
return new CommandResponse(PermissifyConstants.PLAYER_ADDED_TO_GROUP
6768
.replace("<PLAYER>", targetPlayer.getName()).replace("<GROUP>", group.get().getName()), true);
6869
}
@@ -81,6 +82,7 @@ public CommandResponse handleRemovePlayerFromGroup(CommandSender sender, String[
8182
plugin.getPermissifyAPI().getDatabaseHandler().get().removePlayerFromGroup(targetPlayer.getUniqueId(), group.get());
8283
if (targetPlayer.isOnline()) group.get().getPermissions().forEach(permission ->
8384
targetPlayer.getPlayer().addAttachment(plugin, permission.getPermission(), false));
85+
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(targetPlayer.getUniqueId());
8486
return new CommandResponse(PermissifyConstants.PLAYER_REMOVED_FROM_GROUP
8587
.replace("<PLAYER>", targetPlayer.getName()).replace("<GROUP>", group.get().getName()), true);
8688
}
@@ -99,6 +101,7 @@ public CommandResponse handleSetMainGroup(CommandSender sender, String[] args) {
99101
if (!group.get().getPlayers().containsKey(player.getUniqueId()))
100102
return new CommandResponse(PermissifyConstants.PLAYER_NOT_IN_GROUP.replace("<PLAYER>", player.getName()).replace("<GROUP>", group.get().getName()), false);
101103
boolean groupSet = plugin.getPermissifyAPI().getDatabaseHandler().get().setPrimaryGroup(group.get(), player.getUniqueId());
104+
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(player.getUniqueId());
102105
if (groupSet)
103106
return new CommandResponse(PermissifyConstants.MAIN_GROUP_SET.replace("<PLAYER>", player.getName()).replace("<GROUP>", group.get().getName()), false);
104107
// Should be pretty much impossible to get here, unless the database isn't connected.
@@ -116,6 +119,7 @@ public CommandResponse handleAddPermission(CommandSender sender, String[] args)
116119
if (targetPlayer == null || !targetPlayer.hasPlayedBefore()) return new CommandResponse(PermissifyConstants.INVALID_PLAYER, false);
117120
plugin.getPermissifyAPI().getDatabaseHandler().get().addPermission(targetPlayer.getUniqueId(), args[0]);
118121
if (targetPlayer.isOnline()) targetPlayer.getPlayer().addAttachment(plugin, args[0], true);
122+
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(targetPlayer.getUniqueId());
119123
return new CommandResponse(PermissifyConstants.PERMISSION_ADDED_PLAYER
120124
.replace("<PLAYER>", targetPlayer.getName()).replace("<PERMISSION>", args[0]), true);
121125
}
@@ -131,6 +135,7 @@ public CommandResponse handleRemovePermission(CommandSender sender, String[] arg
131135
if (targetPlayer == null || !targetPlayer.hasPlayedBefore()) return new CommandResponse(PermissifyConstants.INVALID_PLAYER, false);
132136
plugin.getPermissifyAPI().getDatabaseHandler().get().removePermission(targetPlayer.getUniqueId(), args[0]);
133137
if (targetPlayer.isOnline()) targetPlayer.getPlayer().addAttachment(plugin, args[0], false);
138+
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(targetPlayer.getUniqueId());
134139
return new CommandResponse(PermissifyConstants.PERMISSION_REMOVED_PLAYER
135140
.replace("<PLAYER>", targetPlayer.getName()).replace("<PERMISSION>", args[0]), true);
136141
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@
2525
package me.innectic.permissify.spigot.events;
2626

2727
import me.innectic.permissify.api.permission.Permission;
28+
import me.innectic.permissify.api.permission.PermissionGroup;
2829
import me.innectic.permissify.spigot.PermissifyMain;
2930
import org.bukkit.entity.Player;
3031
import org.bukkit.event.EventHandler;
3132
import org.bukkit.event.Listener;
3233
import org.bukkit.event.player.PlayerJoinEvent;
3334
import java.util.List;
35+
import java.util.stream.Collectors;
3436

3537
/**
3638
* @author Innectic
@@ -47,8 +49,7 @@ public void onPlayerJoinEvent(PlayerJoinEvent e) {
4749
handler.updateCache(player.getUniqueId());
4850
List<Permission> permissions = handler.getPermissions(player.getUniqueId());
4951
// Add the permissions to the player
50-
handler.getGroups().stream().filter(permissionGroup ->
51-
permissionGroup.hasPlayer(player.getUniqueId())).forEach(group -> permissions.addAll(group.getPermissions()));
52+
handler.getGroups(player.getUniqueId()).stream().map(PermissionGroup::getPermissions).forEach(permissions::addAll);
5253
permissions.forEach(permission -> player.addAttachment(PermissifyMain.getInstance(), permission.getPermission(), permission.isGranted()));
5354
});
5455
}

0 commit comments

Comments
 (0)