Cleanup some remaining TODOs

This commit is contained in:
Luck 2016-10-13 21:16:34 +01:00
parent cd758d7e48
commit 6109718c67
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B
9 changed files with 107 additions and 42 deletions

View File

@ -220,11 +220,6 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
return getDataFolder();
}
@Override
public Message getPlayerStatus(UUID uuid) {
return getServer().getPlayer(getUuidCache().getExternalUUID(uuid)) != null ? Message.PLAYER_ONLINE : Message.PLAYER_OFFLINE;
}
@Override
public int getPlayerCount() {
return getServer().getOnlinePlayers().size();
@ -235,6 +230,16 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
return getServer().getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList());
}
@Override
public Set<UUID> getOnlinePlayers() {
return getServer().getOnlinePlayers().stream().map(Player::getUniqueId).collect(Collectors.toSet());
}
@Override
public boolean isOnline(UUID external) {
return getServer().getPlayer(external) != null;
}
@Override
public List<Sender> getNotifyListeners() {
return getServer().getOnlinePlayers().stream()

View File

@ -171,11 +171,6 @@ public class LPBungeePlugin extends Plugin implements LuckPermsPlugin {
return getDataFolder();
}
@Override
public Message getPlayerStatus(UUID uuid) {
return getProxy().getPlayer(getUuidCache().getExternalUUID(uuid)) != null ? Message.PLAYER_ONLINE : Message.PLAYER_OFFLINE;
}
@Override
public int getPlayerCount() {
return getProxy().getOnlineCount();
@ -186,6 +181,16 @@ public class LPBungeePlugin extends Plugin implements LuckPermsPlugin {
return getProxy().getPlayers().stream().map(ProxiedPlayer::getName).collect(Collectors.toList());
}
@Override
public Set<UUID> getOnlinePlayers() {
return getProxy().getPlayers().stream().map(ProxiedPlayer::getUniqueId).collect(Collectors.toSet());
}
@Override
public boolean isOnline(UUID external) {
return getProxy().getPlayer(external) != null;
}
@Override
public List<Sender> getNotifyListeners() {
return getProxy().getPlayers().stream()

View File

@ -93,7 +93,10 @@ public interface LuckPermsPlugin {
* @param uuid The player's uuid
* @return a formatted status string
*/
Message getPlayerStatus(UUID uuid);
default Message getPlayerStatus(UUID uuid) {
UUID external = getUuidCache().getExternalUUID(uuid);
return isOnline(external) ? Message.PLAYER_ONLINE : Message.PLAYER_OFFLINE;
}
/**
* Gets the number of users online on the platform
@ -107,6 +110,19 @@ public interface LuckPermsPlugin {
*/
List<String> getPlayerList();
/**
* Gets the UUIDs of the users online on the platform
* @return a {@link Set} of UUIDs
*/
Set<UUID> getOnlinePlayers();
/**
* Checks if a user is online
* @param external the users external uuid
* @return true if the user is online
*/
boolean isOnline(UUID external);
/**
* @return a {@link List} of senders online on the platform
*/
@ -117,7 +133,11 @@ public interface LuckPermsPlugin {
*/
Sender getConsoleSender();
// TODO javadoc
/**
* Gets a set of Contexts that should be pre-processed in advance
* @param op if the user being processed is op
* @return a set of contexts
*/
Set<Contexts> getPreProcessContexts(boolean op);
/**

View File

@ -27,9 +27,11 @@ import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import me.lucko.luckperms.api.event.events.GroupAddEvent;
import me.lucko.luckperms.api.event.events.UserPermissionRefreshEvent;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.api.internal.GroupLink;
import me.lucko.luckperms.common.api.internal.PermissionHolderLink;
import me.lucko.luckperms.common.api.internal.UserLink;
import me.lucko.luckperms.common.caching.UserData;
import me.lucko.luckperms.common.core.PermissionHolder;
import me.lucko.luckperms.common.groups.Group;
@ -109,7 +111,6 @@ public class User extends PermissionHolder implements Identifiable<UserIdentifie
userData.invalidateCache();
userData = null;
}
// TODO
}
/**
@ -124,7 +125,7 @@ public class User extends PermissionHolder implements Identifiable<UserIdentifie
UserData ud = userData;
ud.recalculatePermissions();
ud.recalculateMeta();
// TODO api call?
getPlugin().getApiProvider().fireEventAsync(new UserPermissionRefreshEvent(new UserLink(this)));
}
/**

View File

@ -30,6 +30,7 @@ import me.lucko.luckperms.common.utils.AbstractManager;
import me.lucko.luckperms.common.utils.Identifiable;
import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
import java.util.Set;
import java.util.UUID;
@RequiredArgsConstructor
@ -120,14 +121,23 @@ public class UserManager extends AbstractManager<UserIdentifier, User> {
* @param user The user to be cleaned up
*/
public void cleanup(User user) {
// TODO
if (!plugin.isOnline(plugin.getUuidCache().getExternalUUID(user.getUuid()))) {
unload(user);
}
}
/**
* Reloads the data of all online users
*/
public void updateAllUsers() {
// TODO
plugin.doSync(() -> {
Set<UUID> players = plugin.getOnlinePlayers();
plugin.doAsync(() -> {
for (UUID uuid : players) {
plugin.getDatastore().loadUser(plugin.getUuidCache().getUUID(uuid), "null");
}
});
});
}
@Override

View File

@ -65,6 +65,7 @@ import org.spongepowered.api.plugin.Plugin;
import org.spongepowered.api.scheduler.Scheduler;
import org.spongepowered.api.service.permission.PermissionDescription;
import org.spongepowered.api.service.permission.PermissionService;
import org.spongepowered.api.service.permission.Subject;
import org.spongepowered.api.text.Text;
import java.io.File;
@ -103,7 +104,7 @@ public class LPSpongePlugin implements LuckPermsPlugin {
private ConsecutiveExecutor consecutiveExecutor;
private LuckPermsService service;
private LocaleManager localeManager;
private ContextManager<Player> contextManager; // TODO convert this to use Subject instead of Player
private ContextManager<Subject> contextManager;
private CalculatorFactory calculatorFactory;
@Listener
@ -146,7 +147,7 @@ public class LPSpongePlugin implements LuckPermsPlugin {
contextManager = new ContextManager<>();
contextManager.registerCalculator(new ServerCalculator<>(getConfiguration().getServer()));
contextManager.registerCalculator(new WorldCalculator());
contextManager.registerCalculator(new WorldCalculator(this));
getLog().info("Registering PermissionService...");
Sponge.getServiceManager().setProvider(this, PermissionService.class, (service = new LuckPermsService(this)));
@ -227,11 +228,6 @@ public class LPSpongePlugin implements LuckPermsPlugin {
return PlatformType.SPONGE;
}
@Override
public Message getPlayerStatus(UUID uuid) {
return game.getServer().getPlayer(getUuidCache().getExternalUUID(uuid)).isPresent() ? Message.PLAYER_ONLINE : Message.PLAYER_OFFLINE;
}
@Override
public int getPlayerCount() {
return game.getServer().getOnlinePlayers().size();
@ -242,6 +238,16 @@ public class LPSpongePlugin implements LuckPermsPlugin {
return game.getServer().getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList());
}
@Override
public Set<UUID> getOnlinePlayers() {
return game.getServer().getOnlinePlayers().stream().map(Player::getUniqueId).collect(Collectors.toSet());
}
@Override
public boolean isOnline(UUID external) {
return game.getServer().getPlayer(external).isPresent();
}
@Override
public List<Sender> getNotifyListeners() {
return game.getServer().getOnlinePlayers().stream()

View File

@ -24,7 +24,6 @@ package me.lucko.luckperms.sponge.contexts;
import lombok.AllArgsConstructor;
import me.lucko.luckperms.api.context.ContextCalculator;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.Subject;
@ -33,11 +32,11 @@ import java.util.Set;
import java.util.stream.Collectors;
@AllArgsConstructor
public class SpongeCalculatorLink extends ContextCalculator<Player> {
public class SpongeCalculatorLink extends ContextCalculator<Subject> {
private final org.spongepowered.api.service.context.ContextCalculator<Subject> calculator;
@Override
public Map<String, String> giveApplicableContext(Player subject, Map<String, String> accumulator) {
public Map<String, String> giveApplicableContext(Subject subject, Map<String, String> accumulator) {
Set<Context> contexts = accumulator.entrySet().stream().map(e -> new Context(e.getKey(), e.getValue())).collect(Collectors.toSet());
calculator.accumulateContexts(subject, contexts);
@ -46,7 +45,7 @@ public class SpongeCalculatorLink extends ContextCalculator<Player> {
}
@Override
public boolean isContextApplicable(Player subject, Map.Entry<String, String> context) {
public boolean isContextApplicable(Subject subject, Map.Entry<String, String> context) {
Context c = new Context(context.getKey(), context.getValue());
return calculator.matches(c, subject);
}

View File

@ -24,23 +24,49 @@ package me.lucko.luckperms.sponge.contexts;
import lombok.RequiredArgsConstructor;
import me.lucko.luckperms.api.context.ContextCalculator;
import me.lucko.luckperms.common.commands.Util;
import me.lucko.luckperms.sponge.LPSpongePlugin;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.Subject;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
@RequiredArgsConstructor
public class WorldCalculator extends ContextCalculator<Player> {
public class WorldCalculator extends ContextCalculator<Subject> {
private final LPSpongePlugin plugin;
@Override
public Map<String, String> giveApplicableContext(Player subject, Map<String, String> accumulator) {
accumulator.put(Context.WORLD_KEY, subject.getWorld().getName());
public Map<String, String> giveApplicableContext(Subject subject, Map<String, String> accumulator) {
UUID uuid = Util.parseUuid(subject.getIdentifier());
if (uuid == null) {
return accumulator;
}
Optional<Player> p = plugin.getGame().getServer().getPlayer(plugin.getUuidCache().getExternalUUID(uuid));
if (!p.isPresent()) {
return accumulator;
}
accumulator.put(Context.WORLD_KEY, p.get().getWorld().getName());
return accumulator;
}
@Override
public boolean isContextApplicable(Player subject, Map.Entry<String, String> context) {
return context.getKey().equals(Context.WORLD_KEY) && subject.getWorld().getName().equals(context.getValue());
public boolean isContextApplicable(Subject subject, Map.Entry<String, String> context) {
UUID uuid = Util.parseUuid(subject.getIdentifier());
if (uuid == null) {
return false;
}
Optional<Player> p = plugin.getGame().getServer().getPlayer(plugin.getUuidCache().getExternalUUID(uuid));
if (!p.isPresent()) {
return false;
}
return context.getKey().equals(Context.WORLD_KEY) && p.get().getWorld().getName().equals(context.getValue());
}
}

View File

@ -172,15 +172,8 @@ public class LuckPermsUserSubject implements Subject {
@Override
public Set<Context> getActiveContexts() {
final UUID uuid = service.getPlugin().getUuidCache().getExternalUUID(user.getUuid());
Optional<Player> player = Sponge.getServer().getPlayer(uuid);
if (!player.isPresent()) {
return SubjectData.GLOBAL_CONTEXT;
}
Map<String, String> context = new HashMap<>();
service.getPlugin().getContextManager().giveApplicableContext(player.get(), context);
return context.entrySet().stream().map(e -> new Context(e.getKey(), e.getValue())).collect(Collectors.toSet());
return service.getPlugin().getContextManager().giveApplicableContext(this, new HashMap<>()).entrySet().stream()
.map(e -> new Context(e.getKey(), e.getValue()))
.collect(Collectors.toSet());
}
}