Skip to content

Commit 8ea9029

Browse files
committed
Move to proper attachments
1 parent faba0d5 commit 8ea9029

File tree

7 files changed

+92
-26
lines changed

7 files changed

+92
-26
lines changed

Spigot/src/main/java/me/innectic/permissify/spigot/PermissifyMain.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import me.innectic.permissify.spigot.events.PlayerJoin;
3232
import me.innectic.permissify.api.PermissifyAPI;
3333
import me.innectic.permissify.api.database.handlers.FullHandler;
34+
import me.innectic.permissify.spigot.events.PlayerLeave;
35+
import me.innectic.permissify.spigot.utils.AttachmentManager;
3436
import me.innectic.permissify.spigot.utils.ConfigVerifier;
3537
import me.innectic.permissify.spigot.utils.DisplayUtil;
3638
import org.bukkit.Bukkit;
@@ -56,6 +58,8 @@ public class PermissifyMain extends JavaPlugin {
5658
@Getter private CacheCommand cacheCommand;
5759
@Getter private ProfileCommand profileCommand;
5860

61+
@Getter private AttachmentManager attachmentManager;
62+
5963
@Getter @Setter private boolean handleChat = false;
6064

6165
@Override
@@ -81,6 +85,8 @@ public void onEnable() {
8185
} catch (Exception e) {
8286
e.printStackTrace();
8387
}
88+
// Create the attachment manager
89+
attachmentManager = new AttachmentManager();
8490
// Register commands
8591
registerCommands();
8692
// Register listeners
@@ -134,5 +140,6 @@ private void registerListeners() {
134140
PluginManager pluginManager = Bukkit.getPluginManager();
135141

136142
pluginManager.registerEvents(new PlayerJoin(), this);
143+
pluginManager.registerEvents(new PlayerLeave(), this);
137144
}
138145
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,10 @@ public String handlePermissionRemove(CommandSender sender, String[] args) {
137137
return PermissifyConstants.UNABLE_TO_CREATE.replace("<TYPE>", "group").replace("<REASON>", "No database handler.");
138138

139139
if (args.length < 2) return PermissifyConstants.NOT_ENOUGH_ARGUMENTS_GROUP_PERMISSION_REMOVE;
140-
boolean added = plugin.getPermissifyAPI().getDatabaseHandler().get().removeGroupPermission(args[0], ArgumentUtil.getRemainingArgs(1, args));
140+
String[] remaining = ArgumentUtil.getRemainingArgs(1, args);
141+
boolean added = plugin.getPermissifyAPI().getDatabaseHandler().get().removeGroupPermission(args[0], remaining);
141142
if (!added) return PermissifyConstants.UNABLE_TO_ADD.replace("<REASON>", "Permission isn't on group!");
142143

143-
String[] remaining = ArgumentUtil.getRemainingArgs(1, args);
144144
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
145145
if (!plugin.getPermissifyAPI().getDatabaseHandler().isPresent()) return;
146146
Optional<PermissionGroup> group = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroup(args[0]);

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

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

4140
import java.util.ArrayList;
4241
import java.util.List;
@@ -96,6 +95,8 @@ public String handleRemovePlayerFromGroup(CommandSender sender, String[] args) {
9695
// TODO: stuff with the new permissible system that's actually done properly
9796
// if (targetPlayer.isOnline()) group.get().getPermissions().forEach(permission ->
9897
// targetPlayer.getPlayer().removeAttachment(new PermissionAttachment(plugin, permission.getPermission())));
98+
plugin.getAttachmentManager().getAttachment(targetPlayer.getUniqueId(), Optional.of(group.get().getName())).ifPresent(attachment ->
99+
group.get().getPermissions().forEach(permission -> attachment.unsetPermission(permission.getPermission())));
99100
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(targetPlayer.getUniqueId());
100101
return PermissifyConstants.PLAYER_REMOVED_FROM_GROUP
101102
.replace("<PLAYER>", targetPlayer.getName()).replace("<GROUP>", group.get().getName());
@@ -199,8 +200,10 @@ public String handleRemovePermission(CommandSender sender, String[] args) {
199200

200201
plugin.getPermissifyAPI().getDatabaseHandler().get().removePermission(targetPlayer.getUniqueId(), args[1]);
201202
if (targetPlayer.isOnline()) {
202-
Optional<PermissionAttachment> attachment = PermissionUtil.findAttachmentByPermission(targetPlayer.getPlayer(), args[1]);
203-
attachment.ifPresent(targetPlayer.getPlayer()::removeAttachment);
203+
System.out.println("ONRSTEORSNTRSEIOTNRSEIOTNRSEIOTNRSEIOTNRSTORSTIOERNTEIORSNTEIRSTN");
204+
205+
plugin.getAttachmentManager().getAttachment(targetPlayer.getUniqueId(), Optional.empty()).ifPresent(self ->
206+
self.unsetPermission(args[1]));
204207
}
205208

206209
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(targetPlayer.getUniqueId());

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import org.bukkit.event.Listener;
3333
import org.bukkit.event.player.PlayerJoinEvent;
3434

35+
import java.util.Optional;
36+
3537
/**
3638
* @author Innectic
3739
* @since 6/15/2017
@@ -40,14 +42,15 @@ public class PlayerJoin implements Listener {
4042

4143
@EventHandler
4244
public void onPlayerJoinEvent(PlayerJoinEvent e) {
43-
Bukkit.getScheduler().runTaskAsynchronously(PermissifyMain.getInstance(), () -> {
45+
PermissifyMain plugin = PermissifyMain.getInstance();
46+
47+
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
4448
Player player = e.getPlayer();
4549
if (player == null) {
4650
System.out.println("Player did not exist on join");
4751
return;
4852
}
49-
PermissionUtil.clearPermissions(player);
50-
// Set the permissions of the player
53+
plugin.getAttachmentManager().setAttachment(player.getUniqueId(), player.addAttachment(plugin), Optional.empty());
5154
PermissionUtil.applyPermissions(player);
5255
});
5356
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package me.innectic.permissify.spigot.events;
2+
3+
import me.innectic.permissify.spigot.PermissifyMain;
4+
import org.bukkit.entity.Player;
5+
import org.bukkit.event.EventHandler;
6+
import org.bukkit.event.Listener;
7+
import org.bukkit.event.player.PlayerQuitEvent;
8+
9+
/**
10+
* @author Innectic
11+
* @since 07/21/2018
12+
*/
13+
public class PlayerLeave implements Listener {
14+
15+
@EventHandler
16+
public void onPlayerQuitEvent(PlayerQuitEvent e) {
17+
PermissifyMain plugin = PermissifyMain.getInstance();
18+
if (plugin == null) return;
19+
20+
if (e.getPlayer() == null) return;
21+
Player player = e.getPlayer();
22+
23+
plugin.getAttachmentManager().removeAttachment(player.getUniqueId());
24+
}
25+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package me.innectic.permissify.spigot.utils;
2+
3+
import org.bukkit.permissions.PermissionAttachment;
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
import java.util.Optional;
8+
import java.util.UUID;
9+
10+
/**
11+
* @author Innectic
12+
* @since 07/21/2018
13+
*/
14+
public class AttachmentManager {
15+
16+
private Map<UUID, Map<String, PermissionAttachment>> attachments = new HashMap<>();
17+
18+
public Optional<PermissionAttachment> getAttachment(UUID uuid, Optional<String> groupName) {
19+
return Optional.ofNullable(attachments.getOrDefault(uuid, new HashMap<>()).getOrDefault(groupName.orElse(""), null));
20+
}
21+
22+
public void setAttachment(UUID uuid, PermissionAttachment attachment, Optional<String> groupName) {
23+
Map<String, PermissionAttachment> attachments = new HashMap<>();
24+
attachments.put(groupName.orElse(""), attachment);
25+
this.attachments.put(uuid, attachments);
26+
}
27+
28+
public void removeAttachment(UUID uuid) {
29+
attachments.remove(uuid);
30+
}
31+
}

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

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,13 @@
2424
*/
2525
package me.innectic.permissify.spigot.utils;
2626

27-
import me.innectic.permissify.api.permission.Permission;
28-
import me.innectic.permissify.api.permission.PermissionGroup;
2927
import me.innectic.permissify.spigot.PermissifyMain;
3028
import org.bukkit.block.CommandBlock;
3129
import org.bukkit.command.CommandSender;
3230
import org.bukkit.command.ConsoleCommandSender;
3331
import org.bukkit.entity.Player;
3432
import org.bukkit.permissions.PermissionAttachment;
35-
import org.bukkit.permissions.PermissionAttachmentInfo;
3633

37-
import java.util.List;
38-
import java.util.Objects;
3934
import java.util.Optional;
4035

4136
/**
@@ -56,26 +51,28 @@ public static boolean hasPermissionOrSuperAdmin(CommandSender sender, String per
5651

5752
public static void applyPermissions(Player player) {
5853
player.getEffectivePermissions().clear();
59-
PermissifyMain.getInstance().getPermissifyAPI().getDatabaseHandler().ifPresent(handler -> {
54+
55+
PermissifyMain plugin = PermissifyMain.getInstance();
56+
plugin.getPermissifyAPI().getDatabaseHandler().ifPresent(handler -> {
6057
// Check if the player should be in a default group.
6158
if (handler.getDefaultGroup().isPresent() && !handler.getDefaultGroup().get().hasPlayer(player.getUniqueId())) {
6259
handler.addPlayerToGroup(player.getUniqueId(), handler.getDefaultGroup().get());
6360
handler.setPrimaryGroup(handler.getDefaultGroup().get(), player.getUniqueId());
6461
}
6562
handler.updateCache(player.getUniqueId());
66-
List<Permission> permissions = handler.getPermissions(player.getUniqueId());
67-
// Add the permissions to the player
68-
handler.getGroups(player.getUniqueId()).stream().map(PermissionGroup::getPermissions).forEach(permissions::addAll);
69-
permissions.forEach(permission -> player.addAttachment(PermissifyMain.getInstance(), permission.getPermission(), permission.isGranted()));
70-
});
71-
}
7263

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-
}
64+
// Add the player's "self" permissions
65+
plugin.getAttachmentManager().getAttachment(player.getUniqueId(), Optional.empty()).ifPresent(self ->
66+
handler.getPermissions(player.getUniqueId()).forEach(permission -> self.setPermission(permission.getPermission(), permission.isGranted())));
67+
68+
// Add the player's group permissions
69+
handler.getGroups(player.getUniqueId()).forEach(group -> {
70+
PermissionAttachment attachment = plugin.getAttachmentManager().getAttachment(player.getUniqueId(), Optional.of(group.getName())).orElse(player.addAttachment(plugin));
71+
attachment.getPermissions().keySet().forEach(attachment::unsetPermission);
7772

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();
73+
group.getPermissions().forEach(permission -> attachment.setPermission(permission.getPermission(), permission.isGranted()));
74+
plugin.getAttachmentManager().setAttachment(player.getUniqueId(), attachment, Optional.of(group.getName()));
75+
});
76+
});
8077
}
8178
}

0 commit comments

Comments
 (0)