diff --git a/build.gradle.kts b/build.gradle.kts index ada4f2b..36274bc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -107,7 +107,6 @@ tasks { reloc("redis.clients") reloc("org.apache.commons") reloc("com.google.protobuf") - reloc("com.google.common") reloc("org.apache.commons.pool2") } diff --git a/src/main/java/net/synchthia/systera/APIClient.java b/src/main/java/net/synchthia/systera/APIClient.java index 856c952..e90223d 100644 --- a/src/main/java/net/synchthia/systera/APIClient.java +++ b/src/main/java/net/synchthia/systera/APIClient.java @@ -255,8 +255,8 @@ public CompletableFuture report(UUID fromUUID, Str return future; } - public CompletableFuture fetchGroups(@NonNull String serverName) { - SysteraProtos.FetchGroupsRequest request = SysteraProtos.FetchGroupsRequest.newBuilder().setServerName(serverName).build(); + public CompletableFuture fetchGroups() { + SysteraProtos.FetchGroupsRequest request = SysteraProtos.FetchGroupsRequest.newBuilder().build(); CompletableFuture future = new CompletableFuture<>(); stub.fetchGroups(request, new CompletableFutureObserver<>(future)); return future; diff --git a/src/main/java/net/synchthia/systera/SysteraPlugin.java b/src/main/java/net/synchthia/systera/SysteraPlugin.java index 8aa91b7..ab1d2a9 100644 --- a/src/main/java/net/synchthia/systera/SysteraPlugin.java +++ b/src/main/java/net/synchthia/systera/SysteraPlugin.java @@ -1,5 +1,7 @@ package net.synchthia.systera; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; import lombok.Getter; import lombok.Setter; import lombok.SneakyThrows; @@ -14,6 +16,7 @@ import net.synchthia.systera.punishments.PunishAPI; import net.synchthia.systera.server.ServerListener; import net.synchthia.systera.stream.RedisClient; +import net.synchthia.systera.tablist.TabListModule; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; @@ -49,6 +52,9 @@ public class SysteraPlugin extends JavaPlugin { @Setter private boolean started; + @Getter + private ProtocolManager protocolManager; + // Stream @Getter private RedisClient redisClient; @@ -69,6 +75,10 @@ public class SysteraPlugin extends JavaPlugin { private AnnotationParser annotationParser; private LegacyPaperCommandManager commandManager; + // TabList + @Getter + private TabListModule tabListModule; + @Override public void onEnable() { try { @@ -86,6 +96,11 @@ public void onEnable() { registerEvents(); registerCommands(); + this.protocolManager = ProtocolLibrary.getProtocolManager(); + + this.tabListModule = new TabListModule(this); + tabListModule.setup(); + this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", new BungeeListener(this)); @@ -193,6 +208,8 @@ public void onDisable() { this.getServer().getMessenger().unregisterOutgoingPluginChannel(this); this.getServer().getMessenger().unregisterIncomingPluginChannel(this); + tabListModule.release(); + this.getLogger().log(Level.INFO, "Disabled: " + this.getName()); this.started = false; } diff --git a/src/main/java/net/synchthia/systera/commands/SysteraCommand.java b/src/main/java/net/synchthia/systera/commands/SysteraCommand.java index 5e93558..ab07f5d 100644 --- a/src/main/java/net/synchthia/systera/commands/SysteraCommand.java +++ b/src/main/java/net/synchthia/systera/commands/SysteraCommand.java @@ -12,10 +12,9 @@ public class SysteraCommand { private final SysteraPlugin plugin; @Command("systera") - @Permission("systera.command.systera") @CommandDescription("Systera command") public void onSystera(CommandSender sender) { - + sender.sendRichMessage("Systera"); } @Command("systera reload") diff --git a/src/main/java/net/synchthia/systera/group/Group.java b/src/main/java/net/synchthia/systera/group/Group.java index 8af1ed3..2b95154 100644 --- a/src/main/java/net/synchthia/systera/group/Group.java +++ b/src/main/java/net/synchthia/systera/group/Group.java @@ -3,23 +3,29 @@ import lombok.Data; import net.synchthia.api.systera.SysteraProtos; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Data public class Group { private String name; private String prefix; - private List globalPerms; - private List serverPerms; + private Map permissions = new HashMap<>(); - public Group(String name, String prefix, List globalPerms, List serverPerms) { + public Group(String name, String prefix, List permissionsList) { this.name = name; this.prefix = prefix; - this.globalPerms = globalPerms; - this.serverPerms = serverPerms; + + for (SysteraProtos.PermissionsEntry permissionsEntry : permissionsList) { + this.permissions.put( + permissionsEntry.getServerName(), + permissionsEntry.getPermissionsList().stream().toList().toArray(new String[0]) + ); + } } public static Group fromProto(SysteraProtos.GroupEntry entry) { - return new Group(entry.getGroupName(), entry.getGroupPrefix(), entry.getGlobalPermsList(), entry.getServerPermsList()); + return new Group(entry.getGroupName(), entry.getGroupPrefix(), entry.getPermissionsList()); } } \ No newline at end of file diff --git a/src/main/java/net/synchthia/systera/group/GroupStore.java b/src/main/java/net/synchthia/systera/group/GroupStore.java index 66f2aba..a1970bc 100644 --- a/src/main/java/net/synchthia/systera/group/GroupStore.java +++ b/src/main/java/net/synchthia/systera/group/GroupStore.java @@ -37,7 +37,7 @@ public int size() { } public CompletableFuture fetch() { - return plugin.getApiClient().fetchGroups(SysteraPlugin.getServerId()).whenComplete((res, throwable) -> { + return plugin.getApiClient().fetchGroups().whenComplete((res, throwable) -> { if (throwable != null) { plugin.getLogger().log(Level.WARNING, "Failed fetch group: ", throwable); return; diff --git a/src/main/java/net/synchthia/systera/player/SysteraPlayer.java b/src/main/java/net/synchthia/systera/player/SysteraPlayer.java index d7732bf..50c22a6 100644 --- a/src/main/java/net/synchthia/systera/player/SysteraPlayer.java +++ b/src/main/java/net/synchthia/systera/player/SysteraPlayer.java @@ -12,6 +12,7 @@ import org.bukkit.permissions.PermissionAttachment; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -140,8 +141,11 @@ public void applyPermissionsByGroup() { this.groups.stream().map(groupName -> plugin.getGroupStore().get(groupName)).forEach(group -> { if (group != null) { - applyPermissions(group.getGlobalPerms()); - applyPermissions(group.getServerPerms()); + applyPermissions(Arrays.stream(group.getPermissions().get("global")).toList()); + String[] serverPerms = group.getPermissions().get(SysteraPlugin.getServerId()); + if (serverPerms != null) { + applyPermissions(Arrays.stream(serverPerms).toList()); + } } else { plugin.getLogger().log(Level.WARNING, "Group is null"); }