Fishnets and Baubles

This commit is contained in:
Paul Reilly
2023-03-17 22:11:00 -05:00
parent 8f84583e4e
commit 31b0a8a3fe
50 changed files with 1489 additions and 550 deletions

View File

@ -1,38 +1,38 @@
package mc.unraveled.reforged.permission;
import lombok.Getter;
import mc.unraveled.reforged.api.Baker;
import mc.unraveled.reforged.api.Locker;
import mc.unraveled.reforged.plugin.Traverse;
import mc.unraveled.reforged.storage.DBGroup;
import mc.unraveled.reforged.util.Tuple;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
public class RankManager implements Baker {
public class RankManager implements Baker, Locker {
@Getter
private final Traverse plugin;
private List<Tuple<Rank, List<OfflinePlayer>, List<String>>> rankQueue = new ArrayList<>();
private List<Group> bakedGroups = new ArrayList<>();
private final List<Tuple<Rank, List<UUID>, List<String>>> rankQueue = new ArrayList<>();
private final List<Group> bakedGroups = new ArrayList<>();
private boolean baked = false;
public RankManager(@NotNull Traverse plugin) {
this.plugin = plugin;
lock().notify();
DBGroup groupHandler = new DBGroup(plugin.getSQLManager().establish());
Arrays.stream(Rank.values()).forEach(groupHandler::createTable);
Rank[] ranks = Rank.values();
for (Rank rank : ranks) {
Tuple<Rank, List<OfflinePlayer>, List<String>> rankTuple;
List<OfflinePlayer> playerList;
Tuple<Rank, List<UUID>, List<String>> rankTuple;
List<UUID> playerList;
List<String> permissionList;
playerList = groupHandler.getPlayers(rank);
@ -46,12 +46,28 @@ public class RankManager implements Baker, Locker {
bake();
}
public void insert(Rank rank, List<OfflinePlayer> player, List<String> args) {
rankQueue.add(new Tuple<>(rank, player, args));
public Traverse getPlugin() {
return plugin;
}
public void eject(Rank rank, List<OfflinePlayer> player, List<String> args) {
rankQueue.remove(new Tuple<>(rank, player, args));
public void insert(Rank rank, List<UUID> playerList, List<String> args) {
rankQueue.add(new Tuple<>(rank, playerList, args));
}
public void eject(Rank rank, List<UUID> playerList, List<String> args) {
rankQueue.remove(new Tuple<>(rank, playerList, args));
}
public Rank getRank(CommandSender player) {
if (player instanceof ConsoleCommandSender) return Rank.CONSOLE;
Player c = (Player) player;
return rankQueue.stream()
.filter(tuple -> tuple.getSecond().contains(c.getUniqueId()))
.findFirst()
.map(Tuple::getFirst)
.orElse(Rank.NON_OP);
}
public void insertPermission(Rank rank, String permission) {
@ -69,13 +85,13 @@ public class RankManager implements Baker, Locker {
public void insertPlayer(Rank rank, OfflinePlayer player) {
rankQueue.stream()
.filter(tuple -> tuple.getFirst().equals(rank))
.forEach(tuple -> tuple.getSecond().add(player));
.forEach(tuple -> tuple.getSecond().add(player.getUniqueId()));
}
public void ejectPlayer(Rank rank, OfflinePlayer player) {
rankQueue.stream()
.filter(tuple -> tuple.getFirst().equals(rank))
.forEach(tuple -> tuple.getSecond().remove(player));
.forEach(tuple -> tuple.getSecond().remove(player.getUniqueId()));
}
public void save() {
@ -98,36 +114,30 @@ public class RankManager implements Baker, Locker {
public void bake() {
if (baked) return;
synchronized (lock()) {
rankQueue.forEach(tuple -> {
Rank rank = tuple.getFirst();
List<OfflinePlayer> players = tuple.getSecond();
List<String> permissions = tuple.getThird();
rankQueue.forEach(tuple -> {
Rank rank = tuple.getFirst();
List<UUID> players = tuple.getSecond();
List<String> permissions = tuple.getThird();
Group group = new Group(rank);
for (OfflinePlayer p : players) {
group.insert(p);
}
for (String arg : permissions) {
group.insert(arg);
}
bakedGroups.add(group);
});
}
Group group = new Group(rank);
for (UUID p : players) {
group.insert(Bukkit.getOfflinePlayer(p));
}
for (String arg : permissions) {
group.insert(arg);
}
bakedGroups.add(group);
});
baked = true;
lock().notify();
}
@Override
public void unbake() {
if (!baked) return;
synchronized (lock()) {
bakedGroups.clear();
}
bakedGroups.clear();
baked = false;
lock().notify();
}
}