mirror of
https://github.com/AuthMe/AuthMeReloaded.git
synced 2025-02-09 08:21:30 +01:00
Add a way to load user's permission data from the permission handler on demand.
#1350
This commit is contained in:
parent
316f8fc642
commit
a5542051f4
@ -4,6 +4,7 @@ import fr.xephi.authme.data.auth.PlayerAuth;
|
|||||||
import fr.xephi.authme.datasource.DataSource;
|
import fr.xephi.authme.datasource.DataSource;
|
||||||
import fr.xephi.authme.message.MessageKey;
|
import fr.xephi.authme.message.MessageKey;
|
||||||
import fr.xephi.authme.message.Messages;
|
import fr.xephi.authme.message.Messages;
|
||||||
|
import fr.xephi.authme.permission.PermissionsManager;
|
||||||
import fr.xephi.authme.process.Management;
|
import fr.xephi.authme.process.Management;
|
||||||
import fr.xephi.authme.service.AntiBotService;
|
import fr.xephi.authme.service.AntiBotService;
|
||||||
import fr.xephi.authme.service.BukkitService;
|
import fr.xephi.authme.service.BukkitService;
|
||||||
@ -79,6 +80,8 @@ public class PlayerListener implements Listener {
|
|||||||
private ValidationService validationService;
|
private ValidationService validationService;
|
||||||
@Inject
|
@Inject
|
||||||
private JoinMessageService joinMessageService;
|
private JoinMessageService joinMessageService;
|
||||||
|
@Inject
|
||||||
|
private PermissionsManager permissionsManager;
|
||||||
|
|
||||||
private static boolean isAsyncPlayerPreLoginEventCalled = false;
|
private static boolean isAsyncPlayerPreLoginEventCalled = false;
|
||||||
|
|
||||||
@ -234,6 +237,13 @@ public class PlayerListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Keep pre-UUID compatibility
|
||||||
|
try {
|
||||||
|
permissionsManager.loadUserData(event.getUniqueId());
|
||||||
|
} catch (NoSuchMethodError e) {
|
||||||
|
permissionsManager.loadUserData(name);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
runOnJoinChecks(name, event.getAddress().getHostAddress());
|
runOnJoinChecks(name, event.getAddress().getHostAddress());
|
||||||
} catch (FailedVerificationException e) {
|
} catch (FailedVerificationException e) {
|
||||||
|
@ -23,6 +23,7 @@ import javax.annotation.PostConstruct;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PermissionsManager.
|
* PermissionsManager.
|
||||||
@ -425,4 +426,18 @@ public class PermissionsManager implements Reloadable {
|
|||||||
// Remove each group
|
// Remove each group
|
||||||
return removeGroups(player, groupNames);
|
return removeGroups(player, groupNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void loadUserData(UUID uuid) {
|
||||||
|
if(!isEnabled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
handler.loadUserData(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadUserData(String name) {
|
||||||
|
if(!isEnabled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
handler.loadUserData(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,9 +11,7 @@ import me.lucko.luckperms.api.Node;
|
|||||||
import me.lucko.luckperms.api.User;
|
import me.lucko.luckperms.api.User;
|
||||||
import me.lucko.luckperms.api.caching.PermissionData;
|
import me.lucko.luckperms.api.caching.PermissionData;
|
||||||
import me.lucko.luckperms.api.caching.UserData;
|
import me.lucko.luckperms.api.caching.UserData;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -43,46 +41,6 @@ public class LuckPermsHandler implements PermissionHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private User getUser(String playerName) {
|
|
||||||
Player player = Bukkit.getPlayerExact(playerName);
|
|
||||||
if (player != null) {
|
|
||||||
return getUser(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
UUID uuid = null;
|
|
||||||
try {
|
|
||||||
uuid = luckPermsApi.getStorage().getUUID(playerName).get(1, TimeUnit.SECONDS);
|
|
||||||
} catch (InterruptedException | ExecutionException | TimeoutException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
if (uuid == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return getUser(uuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
private User getUser(OfflinePlayer player) {
|
|
||||||
return getUser(player.getUniqueId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private User getUser(UUID playerUuid) {
|
|
||||||
User user = luckPermsApi.getUser(playerUuid);
|
|
||||||
if (user == null) {
|
|
||||||
// user not loaded, we need to load them from the storage.
|
|
||||||
// this is a blocking call.
|
|
||||||
try {
|
|
||||||
luckPermsApi.getStorage().loadUser(playerUuid).get(1, TimeUnit.SECONDS);
|
|
||||||
} catch (InterruptedException | TimeoutException | ExecutionException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
// then grab a new instance
|
|
||||||
user = luckPermsApi.getUser(playerUuid);
|
|
||||||
}
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void saveUser(User user) {
|
private void saveUser(User user) {
|
||||||
luckPermsApi.getStorage().saveUser(user)
|
luckPermsApi.getStorage().saveUser(user)
|
||||||
.thenAcceptAsync(wasSuccessful -> {
|
.thenAcceptAsync(wasSuccessful -> {
|
||||||
@ -100,7 +58,7 @@ public class LuckPermsHandler implements PermissionHandler {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
User user = getUser(player);
|
User user = luckPermsApi.getUser(player.getName());
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -123,7 +81,7 @@ public class LuckPermsHandler implements PermissionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasPermissionOffline(String name, PermissionNode node) {
|
public boolean hasPermissionOffline(String name, PermissionNode node) {
|
||||||
User user = getUser(name);
|
User user = luckPermsApi.getUser(name);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -138,7 +96,7 @@ public class LuckPermsHandler implements PermissionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isInGroup(OfflinePlayer player, String group) {
|
public boolean isInGroup(OfflinePlayer player, String group) {
|
||||||
User user = getUser(player);
|
User user = luckPermsApi.getUser(player.getName());
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -152,7 +110,7 @@ public class LuckPermsHandler implements PermissionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeFromGroup(OfflinePlayer player, String group) {
|
public boolean removeFromGroup(OfflinePlayer player, String group) {
|
||||||
User user = getUser(player);
|
User user = luckPermsApi.getUser(player.getName());
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -171,7 +129,7 @@ public class LuckPermsHandler implements PermissionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setGroup(OfflinePlayer player, String group) {
|
public boolean setGroup(OfflinePlayer player, String group) {
|
||||||
User user = getUser(player);
|
User user = luckPermsApi.getUser(player.getName());
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -193,7 +151,7 @@ public class LuckPermsHandler implements PermissionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getGroups(OfflinePlayer player) {
|
public List<String> getGroups(OfflinePlayer player) {
|
||||||
User user = getUser(player);
|
User user = luckPermsApi.getUser(player.getName());
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
@ -223,4 +181,24 @@ public class LuckPermsHandler implements PermissionHandler {
|
|||||||
public PermissionsSystemType getPermissionSystem() {
|
public PermissionsSystemType getPermissionSystem() {
|
||||||
return PermissionsSystemType.LUCK_PERMS;
|
return PermissionsSystemType.LUCK_PERMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadUserData(UUID uuid) {
|
||||||
|
try {
|
||||||
|
luckPermsApi.getStorage().loadUser(uuid).get(5, TimeUnit.SECONDS);
|
||||||
|
} catch (InterruptedException | ExecutionException | TimeoutException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadUserData(String name) {
|
||||||
|
try {
|
||||||
|
UUID uuid = luckPermsApi.getStorage().getUUID(name).get(5, TimeUnit.SECONDS);
|
||||||
|
loadUserData(uuid);
|
||||||
|
} catch (InterruptedException | ExecutionException | TimeoutException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import fr.xephi.authme.util.Utils;
|
|||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public interface PermissionHandler {
|
public interface PermissionHandler {
|
||||||
|
|
||||||
@ -105,4 +106,11 @@ public interface PermissionHandler {
|
|||||||
* @return The permission system.
|
* @return The permission system.
|
||||||
*/
|
*/
|
||||||
PermissionsSystemType getPermissionSystem();
|
PermissionsSystemType getPermissionSystem();
|
||||||
|
|
||||||
|
default void loadUserData(UUID uuid) {
|
||||||
|
}
|
||||||
|
|
||||||
|
default void loadUserData(String name) {
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -197,6 +197,11 @@ public class PurgeExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (OfflinePlayer offlinePlayer : cleared) {
|
for (OfflinePlayer offlinePlayer : cleared) {
|
||||||
|
try {
|
||||||
|
permissionsManager.loadUserData(offlinePlayer.getUniqueId());
|
||||||
|
} catch (NoSuchMethodError e) {
|
||||||
|
permissionsManager.loadUserData(offlinePlayer.getName());
|
||||||
|
}
|
||||||
permissionsManager.removeAllGroups(offlinePlayer);
|
permissionsManager.removeAllGroups(offlinePlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user