3838import org .bukkit .command .CommandSender ;
3939import 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 .*;
4542import 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>" ,
0 commit comments