mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2025-04-18 08:23:01 +00:00
181 lines
5.7 KiB
Java
181 lines
5.7 KiB
Java
package me.totalfreedom.totalfreedommod.rank;
|
|
|
|
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
|
import me.totalfreedom.totalfreedommod.perms.GroupWrapper;
|
|
import me.totalfreedom.totalfreedommod.perms.TrackWrapper;
|
|
import me.totalfreedom.totalfreedommod.perms.UserWrapper;
|
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
|
import net.luckperms.api.model.group.Group;
|
|
import net.luckperms.api.node.NodeEqualityPredicate;
|
|
import net.luckperms.api.node.NodeType;
|
|
import net.luckperms.api.node.types.InheritanceNode;
|
|
import net.luckperms.api.track.DemotionResult;
|
|
import net.luckperms.api.track.PromotionResult;
|
|
import net.luckperms.api.track.Track;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
public class Hierarchy
|
|
{
|
|
private static final Hierarchy hierarchy = new Hierarchy(); // static singleton for global state.
|
|
private final GroupWrapper groupWrapper;
|
|
private final TrackWrapper trackWrapper;
|
|
private final UserWrapper userWrapper;
|
|
|
|
private Hierarchy()
|
|
{
|
|
this.groupWrapper = new GroupWrapper(TotalFreedomMod.getPlugin().lpb.getAPI().getGroupManager());
|
|
this.trackWrapper = new TrackWrapper(TotalFreedomMod.getPlugin().lpb.getAPI().getTrackManager());
|
|
this.userWrapper = new UserWrapper(TotalFreedomMod.getPlugin().lpb.getAPI().getUserManager(),
|
|
TotalFreedomMod.getPlugin().lpb.getAPI().getPlayerAdapter(Player.class));
|
|
}
|
|
|
|
public static Hierarchy getHierarchy()
|
|
{
|
|
return hierarchy;
|
|
}
|
|
|
|
public boolean isUserOnAdminTrack(Player player)
|
|
{
|
|
AtomicBoolean isOnAdminTrack = new AtomicBoolean(false);
|
|
userWrapper.getUser(player).thenAccept(user ->
|
|
user.data().toCollection().stream()
|
|
.filter(NodeType.INHERITANCE::matches)
|
|
.map(NodeType.INHERITANCE::cast)
|
|
.filter(NodeEqualityPredicate.ONLY_KEY
|
|
.equalTo(InheritanceNode
|
|
.builder(GroupProvider.ADMIN.getGroup().getLuckPermsGroup().getName())
|
|
.build()))
|
|
.forEach(node ->
|
|
{
|
|
if (node.getGroupName().startsWith("admin"))
|
|
{
|
|
isOnAdminTrack.set(true);
|
|
}
|
|
})).whenComplete((a, b) ->
|
|
{
|
|
if (b != null)
|
|
{
|
|
FLog.severe(b);
|
|
}
|
|
});
|
|
|
|
return isOnAdminTrack.get();
|
|
}
|
|
|
|
public Track op()
|
|
{
|
|
return trackWrapper.getTrack("OP").join();
|
|
}
|
|
|
|
public Track builder()
|
|
{
|
|
return trackWrapper.getTrack("BUILDER").join();
|
|
}
|
|
|
|
public Track admin()
|
|
{
|
|
return trackWrapper.getTrack("ADMIN").join();
|
|
}
|
|
|
|
public void addInheritance(DisplayableGroup previous, DisplayableGroup current)
|
|
{
|
|
CompletableFuture.runAsync(() ->
|
|
{
|
|
current.getLuckPermsGroup().data().add(InheritanceNode.builder(previous.getLuckPermsGroup()).build());
|
|
groupWrapper.saveGroup(current.getLuckPermsGroup().getName());
|
|
}).whenComplete((a, b) ->
|
|
{
|
|
if (b != null)
|
|
{
|
|
FLog.severe(b);
|
|
}
|
|
});
|
|
}
|
|
|
|
public Group getGroup(String name)
|
|
{
|
|
return groupWrapper.getGroup(name).join();
|
|
}
|
|
|
|
public void addGroupToTrack(Track track, DisplayableGroup group)
|
|
{
|
|
trackWrapper.getTrack(track.getName()).thenAccept(t ->
|
|
{
|
|
t.appendGroup(group.getLuckPermsGroup());
|
|
trackWrapper.saveTrack(t.getName());
|
|
}).whenComplete((a, b) ->
|
|
{
|
|
if (b != null)
|
|
{
|
|
FLog.severe(b);
|
|
}
|
|
});
|
|
}
|
|
|
|
public CompletableFuture<PromotionResult> promoteUser(Track track, Player player)
|
|
{
|
|
return userWrapper.getUserData(player).thenApply(data ->
|
|
track.promote(data.getUser(), data.getContextSet()));
|
|
}
|
|
|
|
public CompletableFuture<DemotionResult> demoteUser(Track track, Player player)
|
|
{
|
|
return userWrapper.getUserData(player).thenApply(data ->
|
|
track.demote(data.getUser(), data.getContextSet()));
|
|
}
|
|
|
|
public void addUserToGroup(DisplayableGroup group, Player player)
|
|
{
|
|
userWrapper.getUserData(player).thenAccept(user ->
|
|
{
|
|
for (InheritanceNode node : group.getLuckPermsGroup().getNodes(NodeType.INHERITANCE))
|
|
{
|
|
user.getUser().data().add(node);
|
|
}
|
|
|
|
user.getUser().getInheritedGroups(user.getQueryOptions()).add(group.getLuckPermsGroup());
|
|
|
|
userWrapper.saveUser(user.getUser());
|
|
}).whenComplete((a, b) ->
|
|
{
|
|
if (b != null)
|
|
{
|
|
FLog.severe(b);
|
|
}
|
|
});
|
|
}
|
|
|
|
public void dropUserFromAll(Track track, Player player)
|
|
{
|
|
userWrapper.getUserData(player).thenAccept(data ->
|
|
{
|
|
for (String group : track.getGroups())
|
|
{
|
|
groupWrapper.getGroup(group).whenComplete((g, b) ->
|
|
{
|
|
if (b != null)
|
|
{
|
|
FLog.severe(b);
|
|
return;
|
|
}
|
|
|
|
for (InheritanceNode node : g.getNodes(NodeType.INHERITANCE))
|
|
{
|
|
data.getUser().data().remove(node);
|
|
}
|
|
});
|
|
}
|
|
userWrapper.saveUser(data.getUser());
|
|
}).whenComplete((a, b) ->
|
|
{
|
|
if (b != null)
|
|
{
|
|
FLog.severe(b);
|
|
}
|
|
});
|
|
}
|
|
}
|