Skip to content

Commit ff6c389

Browse files
committed
Better permission removal
1 parent cddae40 commit ff6c389

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.bukkit.Bukkit;
3737
import org.bukkit.OfflinePlayer;
3838
import org.bukkit.command.CommandSender;
39+
import org.bukkit.permissions.PermissionAttachment;
3940

4041
import java.util.ArrayList;
4142
import java.util.List;
@@ -196,7 +197,10 @@ public String handleRemovePermission(CommandSender sender, String[] args) {
196197
}
197198

198199
plugin.getPermissifyAPI().getDatabaseHandler().get().removePermission(targetPlayer.getUniqueId(), args[1]);
199-
if (targetPlayer.isOnline()) targetPlayer.getPlayer().addAttachment(plugin, args[1], false);
200+
if (targetPlayer.isOnline()) {
201+
Optional<PermissionAttachment> attachment = PermissionUtil.findAttachmentByPermission(targetPlayer.getPlayer(), args[1]);
202+
attachment.ifPresent(targetPlayer.getPlayer()::removeAttachment);
203+
}
200204

201205
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(targetPlayer.getUniqueId());
202206
return PermissifyConstants.PERMISSION_REMOVED_PLAYER

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@ public class PlayerJoin implements Listener {
4242
public void onPlayerJoinEvent(PlayerJoinEvent e) {
4343
Bukkit.getScheduler().runTaskAsynchronously(PermissifyMain.getInstance(), () -> {
4444
Player player = e.getPlayer();
45-
if (player == null) return;
45+
if (player == null) {
46+
System.out.println("Player did not exist on join");
47+
return;
48+
}
49+
PermissionUtil.clearPermissions(player);
4650
// Set the permissions of the player
4751
PermissionUtil.applyPermissions(player);
4852
});

Spigot/src/main/java/me/innectic/permissify/spigot/utils/PermissionUtil.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,12 @@
3131
import org.bukkit.command.CommandSender;
3232
import org.bukkit.command.ConsoleCommandSender;
3333
import org.bukkit.entity.Player;
34+
import org.bukkit.permissions.PermissionAttachment;
35+
import org.bukkit.permissions.PermissionAttachmentInfo;
3436

3537
import java.util.List;
38+
import java.util.Objects;
39+
import java.util.Optional;
3640

3741
/**
3842
* @author Innectic
@@ -65,4 +69,13 @@ public static void applyPermissions(Player player) {
6569
permissions.forEach(permission -> player.addAttachment(PermissifyMain.getInstance(), permission.getPermission(), permission.isGranted()));
6670
});
6771
}
72+
73+
public static void clearPermissions(Player player) {
74+
player.getEffectivePermissions().stream().filter(Objects::nonNull).map(PermissionAttachmentInfo::getAttachment).filter(Objects::nonNull).forEach(player::removeAttachment);
75+
player.recalculatePermissions();
76+
}
77+
78+
public static Optional<PermissionAttachment> findAttachmentByPermission(Player player, String permission) {
79+
return player.getEffectivePermissions().stream().filter(p -> p.getPermission().equalsIgnoreCase(permission)).map(PermissionAttachmentInfo::getAttachment).findFirst();
80+
}
6881
}

0 commit comments

Comments
 (0)