mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2025-07-01 04:26:42 +00:00
Halfway fixed... need to figure out why the group save is getting spammed...
This commit is contained in:
@ -3,12 +3,9 @@ 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.UserData;
|
||||
import me.totalfreedom.totalfreedommod.perms.UserWrapper;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import net.luckperms.api.event.EventBus;
|
||||
import net.luckperms.api.event.EventSubscription;
|
||||
import net.luckperms.api.event.node.NodeAddEvent;
|
||||
import net.luckperms.api.event.node.NodeRemoveEvent;
|
||||
import net.luckperms.api.model.group.Group;
|
||||
import net.luckperms.api.model.user.User;
|
||||
import net.luckperms.api.node.NodeType;
|
||||
@ -17,14 +14,8 @@ import net.luckperms.api.platform.PlayerAdapter;
|
||||
import net.luckperms.api.track.DemotionResult;
|
||||
import net.luckperms.api.track.PromotionResult;
|
||||
import net.luckperms.api.track.Track;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class Hierarchy
|
||||
{
|
||||
private static final Hierarchy hierarchy = new Hierarchy(); // static singleton for global state.
|
||||
@ -38,9 +29,7 @@ public class Hierarchy
|
||||
this.playerAdapter = TotalFreedomMod.getPlugin().lpb.getAPI().getPlayerAdapter(Player.class);
|
||||
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(),
|
||||
getPlayerAdapter());
|
||||
new LuckPermsUserDataListener().register();
|
||||
this.userWrapper = new UserWrapper(TotalFreedomMod.getPlugin().lpb.getAPI().getUserManager(), getPlayerAdapter());
|
||||
}
|
||||
|
||||
public static Hierarchy getHierarchy()
|
||||
@ -70,219 +59,89 @@ public class Hierarchy
|
||||
|
||||
public boolean isUserOnAdminTrack(Player player)
|
||||
{
|
||||
return userWrapper.getUser(player)
|
||||
.thenApply(user -> user.getNodes(NodeType.INHERITANCE)
|
||||
.contains(GroupProvider.inheritanceNode(GroupProvider.ADMIN.getGroup())))
|
||||
.join();
|
||||
User user = uw().getUser(player);
|
||||
return user
|
||||
.getNodes(NodeType.INHERITANCE)
|
||||
.contains(GroupProvider
|
||||
.inheritanceNode(
|
||||
GroupProvider
|
||||
.ADMIN
|
||||
.getGroup()));
|
||||
}
|
||||
|
||||
public Track op()
|
||||
{
|
||||
return trackWrapper.getTrack("OP").join();
|
||||
return tw().getTrack("OP");
|
||||
}
|
||||
|
||||
public Track builder()
|
||||
{
|
||||
return trackWrapper.getTrack("BUILDER").join();
|
||||
return tw().getTrack("BUILDER");
|
||||
}
|
||||
|
||||
public Track admin()
|
||||
{
|
||||
return trackWrapper.getTrack("ADMIN").join();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T getWrapper(Class<T> clazz)
|
||||
{
|
||||
if (clazz == GroupWrapper.class)
|
||||
{
|
||||
return (T) groupWrapper;
|
||||
} else if (clazz == TrackWrapper.class)
|
||||
{
|
||||
return clazz.cast(trackWrapper);
|
||||
} else if (clazz == UserWrapper.class)
|
||||
{
|
||||
return clazz.cast(userWrapper);
|
||||
} else
|
||||
{
|
||||
throw new IllegalArgumentException("Invalid class type");
|
||||
}
|
||||
return tw().getTrack("ADMIN");
|
||||
}
|
||||
|
||||
public void asyncInheritFrom(DisplayableGroup inherited, DisplayableGroup inheritor)
|
||||
{
|
||||
CompletableFuture.runAsync(() ->
|
||||
{
|
||||
inheritor.getLuckPermsGroup().data().add(inherited.getInheritance());
|
||||
groupWrapper.saveGroupAsync(inheritor.getLuckPermsGroup().getName());
|
||||
}).whenComplete((a, b) ->
|
||||
{
|
||||
if (b != null)
|
||||
{
|
||||
FLog.severe(b);
|
||||
}
|
||||
});
|
||||
inheritor
|
||||
.getLuckPermsGroup()
|
||||
.data()
|
||||
.add(inherited.getInheritance());
|
||||
|
||||
gw().saveGroup(inheritor
|
||||
.getLuckPermsGroup()
|
||||
.getName());
|
||||
|
||||
FLog.info("Inherited " + inherited.getName() + " to " + inheritor.getName());
|
||||
}
|
||||
|
||||
public Group getGroup(String name)
|
||||
{
|
||||
return groupWrapper.getGroup(name).join();
|
||||
return gw().getGroup(name);
|
||||
}
|
||||
|
||||
public void asyncTrackGroup(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);
|
||||
}
|
||||
});
|
||||
Track t = tw().getTrack(track.getName());
|
||||
t.appendGroup(group.getLuckPermsGroup());
|
||||
tw().saveTrack(t.getName());
|
||||
gw().saveGroup(group.getLuckPermsGroup().getName());
|
||||
FLog.info("Added " + group.getName() + " to track " + track.getName());
|
||||
}
|
||||
|
||||
public void asyncAddUserData(Player player)
|
||||
public PromotionResult promoteUser(Track track, Player player)
|
||||
{
|
||||
userWrapper.addUserData(player).whenComplete((a, b) ->
|
||||
{
|
||||
if (b != null)
|
||||
{
|
||||
FLog.severe(b);
|
||||
}
|
||||
});
|
||||
User user = UserData.fromPlayer(player);
|
||||
return track.promote(user, UserData.getContextSet(user));
|
||||
}
|
||||
|
||||
public void asyncUpdateUserData(Player player)
|
||||
public DemotionResult demoteUser(Track track, Player player)
|
||||
{
|
||||
userWrapper.updateUserData(player).whenComplete((a, b) ->
|
||||
{
|
||||
if (b != null)
|
||||
{
|
||||
FLog.severe(b);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void asyncUserDrop(Player player)
|
||||
{
|
||||
userWrapper.removeUserData(player).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()));
|
||||
User user = UserData.fromPlayer(player);
|
||||
return track.demote(user, UserData.getContextSet(user));
|
||||
}
|
||||
|
||||
public void addUserToGroup(DisplayableGroup group, Player player)
|
||||
{
|
||||
userWrapper.getUserData(player).thenAccept(user ->
|
||||
userWrapper.addToGroup(user.getUser(), group))
|
||||
.whenComplete((a, b) ->
|
||||
{
|
||||
if (b != null)
|
||||
{
|
||||
FLog.severe(b);
|
||||
}
|
||||
});
|
||||
User user = UserData.fromPlayer(player);
|
||||
uw().addToGroup(user, group);
|
||||
FLog.info("Successfully added " + player.getName() + " to " + group.getName());
|
||||
}
|
||||
|
||||
public void dropUserFromAll(Track track, Player player)
|
||||
public void dropUser(Track track, Player player)
|
||||
{
|
||||
userWrapper.getUserData(player).thenAccept(data ->
|
||||
User user = UserData.fromPlayer(player);
|
||||
|
||||
for (String group : track.getGroups())
|
||||
{
|
||||
for (String group : track.getGroups())
|
||||
{
|
||||
groupWrapper.getGroup(group).whenComplete((g, b) ->
|
||||
{
|
||||
if (b != null)
|
||||
{
|
||||
FLog.severe(b);
|
||||
return;
|
||||
}
|
||||
Group g = gw().getGroup(group);
|
||||
InheritanceNode node = GroupProvider.directFromLPG(g).getInheritance();
|
||||
|
||||
if (data.getUser().getNodes(NodeType.INHERITANCE)
|
||||
.contains(InheritanceNode.builder(g).build()))
|
||||
userWrapper.removeFromGroup(data.getUser(), GroupProvider.fromLuckPermsGroup(g).getGroup());
|
||||
});
|
||||
}
|
||||
}).whenComplete((a, b) ->
|
||||
{
|
||||
if (b != null)
|
||||
{
|
||||
FLog.severe(b);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private class LuckPermsUserDataListener
|
||||
{
|
||||
private final Map<NamespacedKey, EventSubscription<?>> subscriptions = new HashMap<>();
|
||||
|
||||
public void register()
|
||||
{
|
||||
EventBus eventBus = TotalFreedomMod.getPlugin().lpb.getAPI().getEventBus();
|
||||
subscriptions.put(new NamespacedKey(TotalFreedomMod.getPlugin(), "node_add"), eventBus.subscribe(TotalFreedomMod.getPlugin(), NodeAddEvent.class, this::onNodeAdd));
|
||||
subscriptions.put(new NamespacedKey(TotalFreedomMod.getPlugin(), "node_remove"), eventBus.subscribe(TotalFreedomMod.getPlugin(), NodeRemoveEvent.class, this::onNodeRemove));
|
||||
}
|
||||
|
||||
public void unregister()
|
||||
{
|
||||
subscriptions.forEach((key, subscription) -> subscription.close());
|
||||
subscriptions.clear();
|
||||
}
|
||||
|
||||
private void onNodeAdd(NodeAddEvent event)
|
||||
{
|
||||
if (event.getTarget() instanceof User user)
|
||||
{
|
||||
Player player = Bukkit.getPlayer(user.getUniqueId());
|
||||
if (player != null)
|
||||
{
|
||||
TotalFreedomMod.getPlugin().rm.updateDisplay(player);
|
||||
asyncUpdateUserData(player);
|
||||
uw().saveUser(user);
|
||||
}
|
||||
}
|
||||
|
||||
if (event.getTarget() instanceof Group group)
|
||||
{
|
||||
gw().saveGroupAsync(group.getName());
|
||||
}
|
||||
}
|
||||
|
||||
private void onNodeRemove(NodeRemoveEvent event)
|
||||
{
|
||||
if (event.getTarget() instanceof User user)
|
||||
{
|
||||
Player player = Bukkit.getPlayer(user.getUniqueId());
|
||||
if (player != null)
|
||||
{
|
||||
TotalFreedomMod.getPlugin().rm.updateDisplay(player);
|
||||
asyncUpdateUserData(player);
|
||||
uw().saveUser(user);
|
||||
}
|
||||
}
|
||||
|
||||
if (event.getTarget() instanceof Group group)
|
||||
{
|
||||
gw().saveGroupAsync(group.getName());
|
||||
}
|
||||
if (user.getNodes(NodeType.INHERITANCE).contains(node))
|
||||
uw().removeFromGroup(user, GroupProvider.wrappedFromLPG(g).getGroup());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user