-
-
Save lucko/0cc441e8c1d2eeb3270a65bea7d7724b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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