Skip to content

Instantly share code, notes, and snippets.

@lucko

lucko/Enjin.java Secret

Last active November 3, 2016 21:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lucko/0cc441e8c1d2eeb3270a65bea7d7724b to your computer and use it in GitHub Desktop.
Save lucko/0cc441e8c1d2eeb3270a65bea7d7724b to your computer and use it in GitHub Desktop.
package me.lucko.luckperms.sponge;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.network.ClientConnectionEvent;
import org.spongepowered.api.profile.GameProfile;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.PermissionService;
import org.spongepowered.api.service.permission.Subject;
import org.spongepowered.api.service.permission.SubjectData;
import java.util.*;
import java.util.stream.Collectors;
public class PermissionServiceHandler { // implements PermissionHandler
private PermissionService service;
public PermissionServiceHandler(PermissionService service) {
this.service = service;
}
// @Override
public void onJoin(final ClientConnectionEvent.Join event) {
}
// @Override
public void onDisconnect(final ClientConnectionEvent.Disconnect event) {
}
// @Override
public Map<String, List<String>> fetchPlayerGroups(final GameProfile player) {
Subject s = service.getUserSubjects().get(player.getUniqueId().toString());
final Map<String, List<String>> worlds = new HashMap<>();
for (Map.Entry<Set<Context>, List<Subject>> e : s.getSubjectData().getAllParents().entrySet()) {
String world = "*";
for (Context c : e.getKey()) {
if (c.getKey().equalsIgnoreCase("world")) {
world = c.getValue();
break;
}
}
if (!worlds.containsKey(world)) {
worlds.put(world, new ArrayList<>());
}
worlds.get(world).addAll(e.getValue().stream().map(Subject::getIdentifier).collect(Collectors.toList()));
}
return worlds;
}
// @Override
public List<String> fetchGroups() {
List<String> groups = new ArrayList<>();
for (Subject group : service.getGroupSubjects().getAllSubjects()) {
groups.add(group.getIdentifier());
}
return groups;
}
// @Override
public void addGroup(String player, String group, String world) {
if (!fetchGroups().contains(group)) {
return;
}
final Optional<Player> optional = Sponge.getServer().getPlayer(player);
if (optional.isPresent()) {
Player p = optional.get();
if (world != null && !world.equals("*")) {
p.getSubjectData().addParent(
Collections.singleton(new Context("world", world)),
service.getGroupSubjects().get(group)
);
} else {
p.getSubjectData().addParent(SubjectData.GLOBAL_CONTEXT, service.getGroupSubjects().get(group));
}
}
}
// @Override
public void removeGroup(final String player, final String group, final String world) {
final Optional<Player> optional = Sponge.getServer().getPlayer(player);
if (optional.isPresent()) {
Player p = optional.get();
if (world != null && !world.equals("*")) {
p.getSubjectData().removeParent(
Collections.singleton(new Context("world", world)),
service.getGroupSubjects().get(group)
);
} else {
p.getSubjectData().removeParent(SubjectData.GLOBAL_CONTEXT, service.getGroupSubjects().get(group));
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment