Skip to content

Commit 27a3ad1

Browse files
committed
More efficient permission changing
1 parent a83ca09 commit 27a3ad1

File tree

3 files changed

+19
-15
lines changed

3 files changed

+19
-15
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ public void addPermission(String permission) {
6363
Optional<Permission> perm = permissions.stream().filter(groupPermission -> groupPermission.getPermission().equals(permission)).findFirst();
6464
if (perm.isPresent()) perm.get().setGranted(true);
6565
else permissions.add(new Permission(permission, true));
66-
// TODO: Add permissions to the player
6766
}
6867

6968
public boolean hasPermission(String permission) {

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

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,7 @@
3838
import org.bukkit.command.CommandSender;
3939
import org.bukkit.entity.Player;
4040

41-
import java.util.Arrays;
42-
import java.util.List;
43-
import java.util.Objects;
44-
import java.util.Optional;
41+
import java.util.*;
4542
import java.util.stream.Collectors;
4643

4744
/**
@@ -86,8 +83,14 @@ public CommandResponse handleDeleteGroup(CommandSender sender, String[] args) {
8683
if (!plugin.getPermissifyAPI().getDatabaseHandler().isPresent())
8784
return new CommandResponse(PermissifyConstants.UNABLE_TO_REMOVE.replace("<TYPE>", "group").replace("<REASON>", "No database handler"), false);
8885
if (args.length < 1) return new CommandResponse(PermissifyConstants.NOT_ENOUGH_ARGUMENTS_GROUP_REMOVE, false);
86+
Optional<PermissionGroup> group = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroup(args[0]);
87+
if (!group.isPresent()) return new CommandResponse(PermissifyConstants.INVALID_GROUP.replace("<GROUP>", args[0]), false);
88+
List<UUID> playersInGroup = group.get().getPlayers().entrySet().stream().map(Map.Entry::getKey).collect(Collectors.toList());
8989
boolean removed = plugin.getPermissifyAPI().getDatabaseHandler().get().deleteGroup(args[0]);
90-
if (removed) return new CommandResponse(PermissifyConstants.GROUP_REMOVED.replace("<GROUP>", args[0]), false);
90+
if (removed) {
91+
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> playersInGroup.stream().map(Bukkit::getPlayer).filter(Objects::nonNull).forEach(PermissionUtil::applyPermissions));
92+
return new CommandResponse(PermissifyConstants.GROUP_REMOVED.replace("<GROUP>", args[0]), false);
93+
}
9194
return new CommandResponse(PermissifyConstants.UNABLE_TO_REMOVE.replace("<TYPE>", "group").replace("<REASON>", "Unable to connect to database"), false);
9295
}
9396

@@ -106,9 +109,10 @@ public CommandResponse handlePermissionAdd(CommandSender sender, String[] args)
106109
if (!plugin.getPermissifyAPI().getDatabaseHandler().isPresent()) return;
107110
Optional<PermissionGroup> group = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroups()
108111
.stream().filter(permissionGroup -> permissionGroup.getName().equals(args[0])).findFirst();
109-
group.ifPresent(permissionGroup -> Arrays.stream(remaining).forEach(permission ->
110-
permissionGroup.getPlayers().keySet().stream().map(Bukkit::getPlayer)
111-
.filter(Objects::nonNull).forEach(player -> player.addAttachment(plugin, permission, true))));
112+
group.ifPresent(permissionGroup -> {
113+
Arrays.stream(remaining).forEach(permissionGroup::addPermission);
114+
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> permissionGroup.getPlayers().entrySet().stream().map(Map.Entry::getKey).map(Bukkit::getPlayer).filter(Objects::nonNull).forEach(PermissionUtil::applyPermissions));
115+
});
112116
});
113117
return new CommandResponse(PermissifyConstants.PERMISSION_ADDED_GROUP.replace("<PERMISSION>",
114118
String.join(", ", ArgumentUtil.getRemainingArgs(1, args)).replace("<GROUP>", args[0])), true);
@@ -129,9 +133,11 @@ public CommandResponse handlePermissionRemove(CommandSender sender, String[] arg
129133
Optional<PermissionGroup> group = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroups()
130134
.stream().filter(permissionGroup -> permissionGroup.getName().equals(args[0])).findFirst();
131135
group.ifPresent(permissionGroup -> {
132-
for (String permission : remaining)
133-
permissionGroup.getPlayers().keySet().stream().map(Bukkit::getPlayer).filter(Objects::nonNull)
134-
.forEach(player -> player.addAttachment(plugin, permission, false));
136+
for (String permission : remaining) {
137+
permissionGroup.removePermission(permission);
138+
}
139+
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> permissionGroup.getPlayers().keySet().stream().map(Bukkit::getPlayer).filter(Objects::nonNull).forEach(PermissionUtil::applyPermissions));
140+
135141
});
136142
});
137143
return new CommandResponse(PermissifyConstants.PERMISSION_REMOVED_GROUP.replace("<PERMISSION>",

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,13 @@ public class PreProcess implements Listener {
4747

4848
private Set<String> validWhisperCommands = new HashSet<>(Arrays.asList("/msg", "/whisper", "/tell"));
4949

50-
// @Return: Should this command's output not look like permissify ever touches it?
51-
5250
@EventHandler
5351
public void onCommandPreProcess(PlayerCommandPreprocessEvent e) {
52+
if (!PermissifyMain.getInstance().isHandleChat()) return;
53+
if (!PermissifyMain.getInstance().getPermissifyAPI().getDatabaseHandler().isPresent()) return;
5454
String command = e.getMessage();
5555
if (!validWhisperCommands.contains(command)) return;
5656
e.setCancelled(true);
57-
if (!PermissifyMain.getInstance().getPermissifyAPI().getDatabaseHandler().isPresent()) return;
5857
// We don't care about the command at the beginning
5958
String[] arguments = ArgumentUtil.getRemainingArgs(1, command.split(" "));
6059
Player player = Bukkit.getPlayer(arguments[0]);

0 commit comments

Comments
 (0)