From 44ac2589a36404dbc61c99b9911ac3ae45f90791 Mon Sep 17 00:00:00 2001 From: PiggyPiglet Date: Mon, 2 Feb 2026 21:39:05 +0800 Subject: [PATCH] Fix permission system - also 1.0.4 release it was horribly broken :( --- build.gradle.kts | 2 +- .../commands/PlaceholderCommand.java | 23 ++++++++----------- .../commands/PlaceholderCommandRouter.java | 16 ++++++------- .../commands/impl/cloud/CommandECloud.java | 10 +++++--- .../impl/cloud/CommandECloudClear.java | 1 + .../impl/cloud/CommandECloudDownload.java | 1 + .../cloud/CommandECloudExpansionInfo.java | 1 + .../cloud/CommandECloudExpansionList.java | 1 + .../CommandECloudExpansionPlaceholders.java | 1 + .../impl/cloud/CommandECloudRefresh.java | 1 + .../impl/cloud/CommandECloudStatus.java | 1 + .../impl/cloud/CommandECloudUpdate.java | 1 + .../commands/impl/local/CommandDump.java | 1 + .../impl/local/CommandExpansionRegister.java | 1 + .../local/CommandExpansionUnregister.java | 1 + .../commands/impl/local/CommandHelp.java | 1 + .../commands/impl/local/CommandInfo.java | 1 + .../commands/impl/local/CommandList.java | 1 + .../commands/impl/local/CommandParse.java | 1 + .../commands/impl/local/CommandReload.java | 1 + .../commands/impl/local/CommandVersion.java | 1 + 21 files changed, 41 insertions(+), 27 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d097ce0..c5777a9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } group = "at.helpch" -version = "1.0.4-DEV-${System.getProperty("BUILD_NUMBER")}" +version = "1.0.4" description = "An awesome placeholder provider!" diff --git a/src/main/java/at/helpch/placeholderapi/commands/PlaceholderCommand.java b/src/main/java/at/helpch/placeholderapi/commands/PlaceholderCommand.java index 091764f..eddd0c2 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/PlaceholderCommand.java +++ b/src/main/java/at/helpch/placeholderapi/commands/PlaceholderCommand.java @@ -20,10 +20,7 @@ package at.helpch.placeholderapi.commands; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Set; +import java.util.*; import java.util.stream.Stream; import at.helpch.placeholderapi.PlaceholderAPIPlugin; @@ -39,22 +36,20 @@ public abstract class PlaceholderCommand { @NotNull private final Set alias; - @Nullable - private String permission; + private Set permissions = new HashSet<>(); protected PlaceholderCommand(@NotNull final String label, @NotNull final String... alias) { this.label = label; this.alias = Set.of(alias); - setPermission("placeholderapi." + label); + setPermissions("placeholderapi.*"); } @NotNull public static Stream filterByPermission(@NotNull final CommandSender sender, @NotNull final Stream commands) { - return commands.filter( - target -> target.getPermission() == null || sender.hasPermission(target.getPermission())); + return commands.filter(target -> target.getPermissions().stream().anyMatch(sender::hasPermission)); } public static void suggestByParameter(@NotNull final Stream possible, @@ -87,13 +82,13 @@ public abstract class PlaceholderCommand { return set; } - @Nullable - public final String getPermission() { - return permission; + @NotNull + public final Set getPermissions() { + return permissions; } - public void setPermission(@NotNull final String permission) { - this.permission = permission; + public void setPermissions(@NotNull final String @NotNull ... permissions) { + this.permissions.addAll(Arrays.asList(permissions)); } public void evaluate(@NotNull final PlaceholderAPIPlugin plugin, diff --git a/src/main/java/at/helpch/placeholderapi/commands/PlaceholderCommandRouter.java b/src/main/java/at/helpch/placeholderapi/commands/PlaceholderCommandRouter.java index bff043b..e803ea5 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/PlaceholderCommandRouter.java +++ b/src/main/java/at/helpch/placeholderapi/commands/PlaceholderCommandRouter.java @@ -29,16 +29,9 @@ import java.util.concurrent.CompletableFuture; import at.helpch.placeholderapi.PlaceholderAPIPlugin; import at.helpch.placeholderapi.commands.impl.cloud.CommandECloud; import at.helpch.placeholderapi.commands.impl.local.*; -import com.hypixel.hytale.component.Ref; -import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.command.system.*; import com.hypixel.hytale.server.core.command.system.CommandSender; -import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand; -import com.hypixel.hytale.server.core.entity.entities.Player; -import com.hypixel.hytale.server.core.universe.PlayerRef; -import com.hypixel.hytale.server.core.universe.world.World; -import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; @@ -85,6 +78,11 @@ public final class PlaceholderCommandRouter extends AbstractCommand { this.commands = commands; } + @Override + protected boolean canGeneratePermission() { + return false; + } + @Override protected @Nullable CompletableFuture execute(@NotNull final CommandContext context) { final String[] args = context.getInputString().replace("papi", "").replace("placeholderapi", "").trim().split(" "); @@ -108,8 +106,8 @@ public final class PlaceholderCommandRouter extends AbstractCommand { return CompletableFuture.completedFuture(null); } - final String permission = target.getPermission(); - if (permission != null && !permission.isEmpty() && !sender.hasPermission(permission)) { + final Set permissions = target.getPermissions(); + if (permissions.stream().noneMatch(sender::hasPermission)) { sender.sendMessage(Message.raw("You do not have permission to do this!").color(Color.RED)); return CompletableFuture.completedFuture(null); diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloud.java b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloud.java index f640aa5..7c6a8a4 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloud.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloud.java @@ -30,6 +30,7 @@ import org.jetbrains.annotations.Unmodifiable; import java.awt.*; import java.util.*; import java.util.List; +import java.util.stream.Collectors; public final class CommandECloud extends PlaceholderCommand { @@ -46,7 +47,7 @@ public final class CommandECloud extends PlaceholderCommand { static { COMMANDS - .forEach(command -> command.setPermission("placeholderapi.ecloud." + command.getLabel())); + .forEach(command -> command.setPermissions("placeholderapi.ecloud." + command.getLabel())); } @NotNull @@ -64,6 +65,9 @@ public final class CommandECloud extends PlaceholderCommand { } this.commands = commands; + + setPermissions("placeholderapi.ecloud.*", "placeholderapi.ecloud"); + COMMANDS.stream().map(PlaceholderCommand::getPermissions).flatMap(Set::stream).forEach(this::setPermissions); } @@ -129,8 +133,8 @@ public final class CommandECloud extends PlaceholderCommand { return; } - final String permission = target.getPermission(); - if (permission != null && !permission.isEmpty() && !sender.hasPermission(permission)) { + final Set permissions = target.getPermissions(); + if (permissions.stream().noneMatch(sender::hasPermission)) { sender.sendMessage(Message.raw("You do not have permission to do this!").color(Color.RED)); // Msg.msg(sender, "&cYou do not have permission to do this!"); return; diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudClear.java b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudClear.java index e0cbf4e..f6dd6c6 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudClear.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudClear.java @@ -34,6 +34,7 @@ public final class CommandECloudClear extends PlaceholderCommand { public CommandECloudClear() { super("clear"); + setPermissions("placeholderapi.ecloud.*", "placeholderapi.ecloud.clear"); } @Override diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudDownload.java b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudDownload.java index cb74486..144894f 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudDownload.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudDownload.java @@ -36,6 +36,7 @@ public final class CommandECloudDownload extends PlaceholderCommand { public CommandECloudDownload() { super("download"); + setPermissions("placeholderapi.ecloud.*", "placeholderapi.ecloud.download"); } private boolean isBlockedExpansion(String name) { diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionInfo.java b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionInfo.java index d78f80e..261a998 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionInfo.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionInfo.java @@ -35,6 +35,7 @@ public final class CommandECloudExpansionInfo extends PlaceholderCommand { public CommandECloudExpansionInfo() { super("info"); + setPermissions("placeholderapi.ecloud.*", "placeholderapi.ecloud.info"); } @Override diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionList.java b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionList.java index 06751bf..729964e 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionList.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionList.java @@ -55,6 +55,7 @@ public final class CommandECloudExpansionList extends PlaceholderCommand { public CommandECloudExpansionList() { super("list"); + setPermissions("placeholderapi.ecloud.*", "placeholderapi.ecloud.list"); } @NotNull diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionPlaceholders.java b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionPlaceholders.java index f9b1f97..04abb6c 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionPlaceholders.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudExpansionPlaceholders.java @@ -38,6 +38,7 @@ public final class CommandECloudExpansionPlaceholders extends PlaceholderCommand public CommandECloudExpansionPlaceholders() { super("placeholders"); + setPermissions("placeholderapi.ecloud.*", "placeholderapi.ecloud.placeholders"); } @Override diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudRefresh.java b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudRefresh.java index a37f870..a34ce7a 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudRefresh.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudRefresh.java @@ -34,6 +34,7 @@ public final class CommandECloudRefresh extends PlaceholderCommand { public CommandECloudRefresh() { super("refresh"); + setPermissions("placeholderapi.ecloud.*", "placeholderapi.ecloud.refresh"); } @Override diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudStatus.java b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudStatus.java index a3887c3..7cf33d3 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudStatus.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudStatus.java @@ -35,6 +35,7 @@ public final class CommandECloudStatus extends PlaceholderCommand { public CommandECloudStatus() { super("status"); + setPermissions("placeholderapi.ecloud.*", "placeholderapi.ecloud.status"); } @Override diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudUpdate.java b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudUpdate.java index fb2c9bc..939f696 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudUpdate.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/cloud/CommandECloudUpdate.java @@ -45,6 +45,7 @@ public final class CommandECloudUpdate extends PlaceholderCommand { public CommandECloudUpdate() { super("update"); + setPermissions("placeholderapi.ecloud.*", "placeholderapi.ecloud.update"); } private static CompletableFuture>> downloadAndDiscover( diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandDump.java b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandDump.java index fcbca55..24723cc 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandDump.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandDump.java @@ -67,6 +67,7 @@ public final class CommandDump extends PlaceholderCommand { public CommandDump() { super("dump"); + setPermissions("placeholderapi.admin", "placeholderapi.dump"); } @Override diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandExpansionRegister.java b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandExpansionRegister.java index 89381cf..9ea9a90 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandExpansionRegister.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandExpansionRegister.java @@ -39,6 +39,7 @@ public final class CommandExpansionRegister extends PlaceholderCommand { public CommandExpansionRegister() { super("register"); + setPermissions("placeholderapi.admin", "placeholderapi.register"); } @Override diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandExpansionUnregister.java b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandExpansionUnregister.java index d7d2ef0..32cf132 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandExpansionUnregister.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandExpansionUnregister.java @@ -36,6 +36,7 @@ public final class CommandExpansionUnregister extends PlaceholderCommand { public CommandExpansionUnregister() { super("unregister"); + setPermissions("placeholderapi.admin", "placeholderapi.unregister"); } @Override diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandHelp.java b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandHelp.java index 589e6b7..5a66598 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandHelp.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandHelp.java @@ -36,6 +36,7 @@ public final class CommandHelp extends PlaceholderCommand { public CommandHelp() { super("help"); + setPermissions("placeholderapi.admin", "placeholderapi.help"); } diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandInfo.java b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandInfo.java index 16c2f23..9c9e6c1 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandInfo.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandInfo.java @@ -35,6 +35,7 @@ public final class CommandInfo extends PlaceholderCommand { public CommandInfo() { super("info"); + setPermissions("placeholderapi.admin", "placeholderapi.info"); } @Override diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandList.java b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandList.java index 13bb91b..732ef3d 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandList.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandList.java @@ -38,6 +38,7 @@ public final class CommandList extends PlaceholderCommand { public CommandList() { super("list"); + setPermissions("placeholderapi.admin", "placeholderapi.list"); } diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandParse.java b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandParse.java index 139a842..703c031 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandParse.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandParse.java @@ -44,6 +44,7 @@ public final class CommandParse extends PlaceholderCommand { public CommandParse() { super("parse", "bcparse", "parserel", "cmdparse"); + setPermissions("placeholderapi.admin", "placeholderapi.parse"); } diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandReload.java b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandReload.java index b979913..27f8e25 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandReload.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandReload.java @@ -32,6 +32,7 @@ public final class CommandReload extends PlaceholderCommand { public CommandReload() { super("reload"); + setPermissions("placeholderapi.admin", "placeholderapi.reload"); } @Override diff --git a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandVersion.java b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandVersion.java index 2fde64b..e77c0bd 100644 --- a/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandVersion.java +++ b/src/main/java/at/helpch/placeholderapi/commands/impl/local/CommandVersion.java @@ -37,6 +37,7 @@ public final class CommandVersion extends PlaceholderCommand { public CommandVersion() { super("version"); + setPermissions("placeholderapi.admin", "placeholderapi.version"); }