Skip to content

Commit dc1a6b8

Browse files
committed
Commit whatever I have just incase I fuck up
1 parent e8e1e57 commit dc1a6b8

File tree

6 files changed

+65
-35
lines changed

6 files changed

+65
-35
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public abstract class DatabaseHandler {
158158
* @param group the group to add them to
159159
* @return if they were added
160160
*/
161-
public abstract boolean addPlayerToGroup(UUID uuid, PermissionGroup group);
161+
public abstract Tristate addPlayerToGroup(UUID uuid, PermissionGroup group);
162162

163163
/**
164164
* Remove a player from a group.
@@ -167,7 +167,7 @@ public abstract class DatabaseHandler {
167167
* @param group the group to remove from
168168
* @return if the player was removed
169169
*/
170-
public abstract boolean removePlayerFromGroup(UUID uuid, PermissionGroup group);
170+
public abstract Tristate removePlayerFromGroup(UUID uuid, PermissionGroup group);
171171

172172
/**
173173
* Get all permissions groups.

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

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -485,16 +485,16 @@ public Optional<PermissionGroup> getGroup(String name) {
485485
}
486486

487487
@Override
488-
public boolean addPlayerToGroup(UUID uuid, PermissionGroup group) {
489-
if (group.hasPlayer(uuid)) return false;
488+
public Tristate addPlayerToGroup(UUID uuid, PermissionGroup group) {
489+
if (group.hasPlayer(uuid)) return Tristate.NONE;
490490
group.addPlayer(uuid, false);
491491
// Update the cache
492492
cachedGroups.put(group.getName(), group);
493493

494494
Optional<Connection> connection = getConnection();
495495
if (!connection.isPresent()) {
496496
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
497-
return false;
497+
return Tristate.FALSE;
498498
}
499499
try {
500500
PreparedStatement statement = connection.get().prepareStatement("INSERT INTO groupMembers (uuid,`group`,`primary`,ladderPosition) VALUES (?,?,?,?)");
@@ -507,26 +507,24 @@ public boolean addPlayerToGroup(UUID uuid, PermissionGroup group) {
507507
statement.execute();
508508
statement.close();
509509
connection.get().close();
510-
return true;
510+
return Tristate.TRUE;
511511
} catch (SQLException e) {
512512
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.of(e)));
513513
e.printStackTrace();
514514
}
515-
return false;
515+
return Tristate.FALSE;
516516
}
517517

518518
@Override
519-
public boolean removePlayerFromGroup(UUID uuid, PermissionGroup group) {
520-
if (!group.hasPlayer(uuid)) return false;
519+
public Tristate removePlayerFromGroup(UUID uuid, PermissionGroup group) {
520+
if (!group.hasPlayer(uuid)) return Tristate.NONE;
521521
group.removePlayer(uuid);
522-
// Update the cache
523-
cachedGroups.remove(group.getName());
524-
cachedGroups.put(group.getName(), group);
522+
System.out.println(group.getClass().hashCode() + " - " + cachedGroups.get(group.getName()).getClass().hashCode());
525523

526524
Optional<Connection> connection = getConnection();
527525
if (!connection.isPresent()) {
528526
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
529-
return false;
527+
return Tristate.FALSE;
530528
}
531529
try {
532530
PreparedStatement statement = connection.get().prepareStatement("DELETE FROM groupMembers WHERE uuid=? AND `group`=?");
@@ -535,12 +533,12 @@ public boolean removePlayerFromGroup(UUID uuid, PermissionGroup group) {
535533
statement.execute();
536534
statement.close();
537535
connection.get().close();
538-
return true;
536+
return Tristate.TRUE;
539537
} catch (SQLException e) {
540538
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.of(e)));
541539
e.printStackTrace();
542540
}
543-
return false;
541+
return Tristate.FALSE;
544542
}
545543

546544
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ public String handlePermissionRemove(CommandSender sender, String[] args) {
139139
if (args.length < 2) return PermissifyConstants.NOT_ENOUGH_ARGUMENTS_GROUP_PERMISSION_REMOVE;
140140
String[] remaining = ArgumentUtil.getRemainingArgs(1, args);
141141
boolean added = plugin.getPermissifyAPI().getDatabaseHandler().get().removeGroupPermission(args[0], remaining);
142-
if (!added) return PermissifyConstants.UNABLE_TO_ADD.replace("<REASON>", "Permission isn't on group!");
142+
if (!added) return PermissifyConstants.UNABLE_TO_REMOVE.replace("<TYPE>", "permission").replace("<REASON>", "Permission isn't on group!");
143143

144144
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
145145
if (!plugin.getPermissifyAPI().getDatabaseHandler().isPresent()) return;

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

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,24 @@ public String handleAddPlayerToGroup(CommandSender sender, String[] args) {
6666
Optional<PermissionGroup> group = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroup(args[1]);
6767
if (!group.isPresent()) return PermissifyConstants.INVALID_GROUP.replace("<GROUP>", args[1]);
6868

69-
plugin.getPermissifyAPI().getDatabaseHandler().get().addPlayerToGroup(targetPlayer.getUniqueId(), group.get());
70-
if (targetPlayer.isOnline()) group.get().getPermissions().forEach(permission ->
71-
targetPlayer.getPlayer().addAttachment(plugin, permission.getPermission(), permission.isGranted()));
69+
Tristate added = plugin.getPermissifyAPI().getDatabaseHandler().get().addPlayerToGroup(targetPlayer.getUniqueId(), group.get());
70+
if (added == Tristate.NONE)
71+
return PermissifyConstants.UNABLE_TO_ADD.replace("<REASON>", "Player already in group.");
72+
else if (added == Tristate.FALSE)
73+
return PermissifyConstants.UNABLE_TO_ADD.replace("<REASON>", "No database handler.");
7274

7375
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(targetPlayer.getUniqueId());
76+
77+
if (targetPlayer.isOnline()) PermissionUtil.applyPermissions(targetPlayer.getPlayer());
78+
7479
return PermissifyConstants.PLAYER_ADDED_TO_GROUP
7580
.replace("<PLAYER>", targetPlayer.getName()).replace("<GROUP>", group.get().getName());
7681
}
7782

7883
public String handleRemovePlayerFromGroup(CommandSender sender, String[] args) {
7984
PermissifyMain plugin = PermissifyMain.getInstance();
8085
if (!plugin.getPermissifyAPI().getDatabaseHandler().isPresent())
81-
return PermissifyConstants.UNABLE_TO_REMOVE.replace("<REASON>", "No database handler.");
86+
return PermissifyConstants.UNABLE_TO_REMOVE.replace("<TYPE>", "player").replace("<REASON>", "No database handler.");
8287

8388
if (!PermissionUtil.hasPermissionOrSuperAdmin(sender, PermissifyConstants.PERMISSIFY_PLAYER_GROUP_REMOVE))
8489
return PermissifyConstants.INSUFFICIENT_PERMISSIONS;
@@ -90,11 +95,16 @@ public String handleRemovePlayerFromGroup(CommandSender sender, String[] args) {
9095

9196
Optional<PermissionGroup> group = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroup(args[1]);
9297
if (!group.isPresent()) return PermissifyConstants.INVALID_GROUP.replace("<GROUP>", args[1]);
93-
plugin.getPermissifyAPI().getDatabaseHandler().get().removePlayerFromGroup(targetPlayer.getUniqueId(), group.get());
9498

95-
plugin.getAttachmentManager().getAttachment(targetPlayer.getUniqueId(), Optional.of(group.get().getName())).ifPresent(attachment ->
96-
group.get().getPermissions().forEach(permission -> attachment.unsetPermission(permission.getPermission())));
99+
Tristate removed = plugin.getPermissifyAPI().getDatabaseHandler().get().removePlayerFromGroup(targetPlayer.getUniqueId(), group.get());
100+
if (removed == Tristate.NONE)
101+
return PermissifyConstants.UNABLE_TO_REMOVE.replace("<TYPE>", "player").replace("<REASON>", "Player not in group.");
102+
else if (removed == Tristate.FALSE)
103+
return PermissifyConstants.UNABLE_TO_REMOVE.replace("<TYPE>", "player").replace("<REASON>", "No database handler.");
104+
97105
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(targetPlayer.getUniqueId());
106+
107+
if (targetPlayer.isOnline()) PermissionUtil.applyPermissions(targetPlayer.getPlayer());
98108
return PermissifyConstants.PLAYER_REMOVED_FROM_GROUP
99109
.replace("<PLAYER>", targetPlayer.getName()).replace("<GROUP>", group.get().getName());
100110
}
@@ -153,15 +163,15 @@ public String handleAddPermission(CommandSender sender, String[] args) {
153163
return PermissifyConstants.PLAYER_ALREADY_HAS_PERMISSION.replace("<PLAYER>", targetPlayer.getName()).replace("<PERMISSION>", args[1]);
154164
}
155165
plugin.getPermissifyAPI().getDatabaseHandler().get().addPermission(targetPlayer.getUniqueId(), args[1]);
156-
if (targetPlayer.isOnline()) targetPlayer.getPlayer().addAttachment(plugin, args[1], true);
166+
if (targetPlayer.isOnline()) PermissionUtil.applyPermissions(targetPlayer.getPlayer());
157167

158168
if (args.length >= 3) {
159169
// Timed permission.
160170
if (!MiscUtil.isInt(args[2])) return PermissifyConstants.INVALID_ARGUMENT.replace("<ARGUMENT>", args[2]);
161171
int time = Integer.parseInt(args[2]);
162172

163173
Bukkit.getScheduler().runTaskLater(plugin, () -> {
164-
targetPlayer.getPlayer().addAttachment(plugin, args[1], false);
174+
if (targetPlayer.isOnline()) PermissionUtil.applyPermissions(targetPlayer.getPlayer());
165175
if (!plugin.getPermissifyAPI().getDatabaseHandler().isPresent()) return;
166176
plugin.getPermissifyAPI().getDatabaseHandler().get().removePermission(targetPlayer.getUniqueId(), args[1]);
167177
plugin.getPermissifyAPI().getDatabaseHandler().get().updateCache(targetPlayer.getUniqueId());

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,15 @@
22

33
import org.bukkit.permissions.PermissionAttachment;
44

5-
import java.util.HashMap;
6-
import java.util.Map;
7-
import java.util.Optional;
8-
import java.util.UUID;
5+
import java.util.*;
96

107
/**
118
* @author Innectic
129
* @since 07/21/2018
1310
*/
1411
public class AttachmentManager {
1512

16-
private Map<UUID, Map<String, PermissionAttachment>> attachments = new HashMap<>();
13+
private static Map<UUID, Map<String, PermissionAttachment>> attachments = new HashMap<>();
1714

1815
public Optional<PermissionAttachment> getAttachment(UUID uuid, Optional<String> groupName) {
1916
return Optional.ofNullable(attachments.getOrDefault(uuid, new HashMap<>()).getOrDefault(groupName.orElse(""), null));
@@ -22,10 +19,19 @@ public Optional<PermissionAttachment> getAttachment(UUID uuid, Optional<String>
2219
public void setAttachment(UUID uuid, PermissionAttachment attachment, Optional<String> groupName) {
2320
Map<String, PermissionAttachment> attachments = new HashMap<>();
2421
attachments.put(groupName.orElse(""), attachment);
25-
this.attachments.put(uuid, attachments);
22+
AttachmentManager.attachments.put(uuid, attachments);
2623
}
2724

2825
public void removeAttachment(UUID uuid) {
2926
attachments.remove(uuid);
3027
}
28+
29+
public Collection<PermissionAttachment> getAllAttachmentsForPlayer(UUID uuid) {
30+
return attachments.get(uuid).values();
31+
}
32+
33+
public void resetAllPermissibles(UUID uuid) {
34+
attachments.get(uuid).values().forEach(attachment -> attachment.getPermissions().keySet().forEach(attachment::unsetPermission));
35+
attachments.remove(uuid);
36+
}
3137
}

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,17 @@ public static boolean hasPermissionOrSuperAdmin(CommandSender sender, String per
5050
}
5151

5252
public static void applyPermissions(Player player) {
53-
player.getEffectivePermissions().clear();
54-
5553
PermissifyMain plugin = PermissifyMain.getInstance();
54+
55+
System.out.println("FIRST");
56+
plugin.getAttachmentManager().getAllAttachmentsForPlayer(player.getUniqueId()).forEach(entry -> entry.getPermissions().keySet().forEach(System.out::println));
57+
// plugin.getAttachmentManager().removeAttachment(player.getUniqueId());
58+
plugin.getAttachmentManager().resetAllPermissibles(player.getUniqueId());
59+
plugin.getAttachmentManager().setAttachment(player.getUniqueId(), player.addAttachment(plugin), Optional.empty());
60+
player.recalculatePermissions();
61+
62+
plugin.getAttachmentManager().getAllAttachmentsForPlayer(player.getUniqueId()).forEach(attachment -> player.getEffectivePermissions().forEach(info -> attachment.unsetPermission(info.getPermission())));
63+
5664
plugin.getPermissifyAPI().getDatabaseHandler().ifPresent(handler -> {
5765
// Check if the player should be in a default group.
5866
if (handler.getDefaultGroup().isPresent() && !handler.getDefaultGroup().get().hasPlayer(player.getUniqueId())) {
@@ -63,16 +71,24 @@ public static void applyPermissions(Player player) {
6371

6472
// Add the player's "self" permissions
6573
plugin.getAttachmentManager().getAttachment(player.getUniqueId(), Optional.empty()).ifPresent(self ->
66-
handler.getPermissions(player.getUniqueId()).forEach(permission -> self.setPermission(permission.getPermission(), permission.isGranted())));
74+
handler.getPermissions(player.getUniqueId()).forEach(permission -> {
75+
System.out.println(permission.getPermission() + " -> " + permission.isGranted());
76+
self.setPermission(permission.getPermission(), permission.isGranted());
77+
}));
6778

6879
// Add the player's group permissions
6980
handler.getGroups(player.getUniqueId()).forEach(group -> {
7081
PermissionAttachment attachment = plugin.getAttachmentManager().getAttachment(player.getUniqueId(), Optional.of(group.getName())).orElse(player.addAttachment(plugin));
7182
attachment.getPermissions().keySet().forEach(attachment::unsetPermission);
7283

73-
group.getPermissions().forEach(permission -> attachment.setPermission(permission.getPermission(), permission.isGranted()));
84+
group.getPermissions().forEach(permission -> {
85+
System.out.println(group.getName() + ": " + permission.getPermission() + " -> " + permission.isGranted());
86+
attachment.setPermission(permission.getPermission(), permission.isGranted());
87+
});
7488
plugin.getAttachmentManager().setAttachment(player.getUniqueId(), attachment, Optional.of(group.getName()));
7589
});
7690
});
91+
System.out.println("SECOND");
92+
plugin.getAttachmentManager().getAllAttachmentsForPlayer(player.getUniqueId()).forEach(entry -> entry.getPermissions().keySet().forEach(System.out::println));
7793
}
7894
}

0 commit comments

Comments
 (0)