diff --git a/sponge/src/main/java/me/lucko/luckperms/users/SpongeUser.java b/sponge/src/main/java/me/lucko/luckperms/users/SpongeUser.java index 50ae9d83b..0ad5c92f3 100644 --- a/sponge/src/main/java/me/lucko/luckperms/users/SpongeUser.java +++ b/sponge/src/main/java/me/lucko/luckperms/users/SpongeUser.java @@ -23,6 +23,8 @@ package me.lucko.luckperms.users; import me.lucko.luckperms.LPSpongePlugin; +import me.lucko.luckperms.api.event.events.UserPermissionRefreshEvent; +import me.lucko.luckperms.api.implementation.internal.UserLink; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.util.Tristate; @@ -46,18 +48,21 @@ class SpongeUser extends User { @Override public void refreshPermissions() { - Optional p = plugin.getGame().getServer().getPlayer(plugin.getUuidCache().getExternalUUID(getUuid())); - if (!p.isPresent()) return; + plugin.doSync(() -> { + Optional p = plugin.getGame().getServer().getPlayer(plugin.getUuidCache().getExternalUUID(getUuid())); + if (!p.isPresent()) return; - final Player player = p.get(); + final Player player = p.get(); - // Clear existing permissions - player.getSubjectData().clearParents(); - player.getSubjectData().clearPermissions(); + // Clear existing permissions + player.getSubjectData().clearParents(); + player.getSubjectData().clearPermissions(); - // Re-add all defined permissions for the user - final String world = player.getWorld().getName(); - Map local = getLocalPermissions(getPlugin().getConfiguration().getServer(), world, null); - local.entrySet().forEach(e -> player.getSubjectData().setPermission(Collections.emptySet(), e.getKey(), Tristate.fromBoolean(e.getValue()))); + // Re-add all defined permissions for the user + final String world = player.getWorld().getName(); + Map local = getLocalPermissions(getPlugin().getConfiguration().getServer(), world, null); + local.entrySet().forEach(e -> player.getSubjectData().setPermission(Collections.emptySet(), e.getKey(), Tristate.fromBoolean(e.getValue()))); + plugin.getApiProvider().fireEventAsync(new UserPermissionRefreshEvent(new UserLink(this))); + }); } }