diff --git a/examples/fabric/src/main/java/dev/rollczi/example/fabric/server/ServerExampleFabric.java b/examples/fabric/src/main/java/dev/rollczi/example/fabric/server/ServerExampleFabric.java index 983e1ccd..8bfbf65d 100644 --- a/examples/fabric/src/main/java/dev/rollczi/example/fabric/server/ServerExampleFabric.java +++ b/examples/fabric/src/main/java/dev/rollczi/example/fabric/server/ServerExampleFabric.java @@ -4,24 +4,12 @@ import dev.rollczi.litecommands.fabric.LiteFabricFactory; import dev.rollczi.litecommands.luckperms.LuckPermsPermissionFactory; import net.fabricmc.api.DedicatedServerModInitializer; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.command.ServerCommandSource; public class ServerExampleFabric implements DedicatedServerModInitializer { @Override public void onInitializeServer() { LiteFabricFactory.server() - .permissionResolver(LuckPermsPermissionFactory.create(ServerCommandSource.class, (sender) -> { - if (sender.isExecutedByPlayer()) { - return sender.getPlayer().getUuid(); - } - - if (sender.output instanceof MinecraftServer) { - return LuckPermsPermissionFactory.CONSOLE; - } - - return null; - })) + .permissionResolver(new LuckPermsPermissionFactory()) .commands(new ExampleCommand()) .build(); } diff --git a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/server/FabricServerSender.java b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/server/FabricServerSender.java index 9ff20755..607f527c 100644 --- a/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/server/FabricServerSender.java +++ b/litecommands-fabric/src/main/java/dev/rollczi/litecommands/fabric/server/FabricServerSender.java @@ -5,9 +5,6 @@ import net.minecraft.entity.Entity; import net.minecraft.server.command.ServerCommandSource; -import java.util.ArrayList; -import java.util.List; - public class FabricServerSender extends AbstractPlatformSender { private final ServerCommandSource source; @@ -23,18 +20,17 @@ public String getName() { @Override public Identifier getIdentifier() { - List list = new ArrayList<>(); - list.add(source.getName()); Entity entity = source.getEntity(); - if (entity != null) { - list.add(entity.getUuid()); + if (entity == null) { + return Identifier.CONSOLE; } - return Identifier.of(list.toArray()); + + return Identifier.of(source.getName(), entity.getUuid()); } @Override public Object getHandle() { - return (SENDER) this.source; + return this.source; } } diff --git a/litecommands-luckperms/src/dev/rollczi/litecommands/luckperms/LuckPermsPermissionFactory.java b/litecommands-luckperms/src/dev/rollczi/litecommands/luckperms/LuckPermsPermissionFactory.java index 1eaf198a..fcbb047a 100644 --- a/litecommands-luckperms/src/dev/rollczi/litecommands/luckperms/LuckPermsPermissionFactory.java +++ b/litecommands-luckperms/src/dev/rollczi/litecommands/luckperms/LuckPermsPermissionFactory.java @@ -1,44 +1,37 @@ package dev.rollczi.litecommands.luckperms; -import dev.rollczi.litecommands.permission.PermissionResolver; +import dev.rollczi.litecommands.identifier.Identifier; +import dev.rollczi.litecommands.permission.PermissionDefaultResolver; import dev.rollczi.litecommands.platform.PlatformSender; -import java.util.function.BiPredicate; import net.luckperms.api.LuckPermsProvider; import net.luckperms.api.model.user.User; import net.luckperms.api.model.user.UserManager; import net.luckperms.api.query.QueryOptions; import java.util.UUID; -import java.util.function.Function; import java.util.function.Supplier; -import org.jetbrains.annotations.Nullable; -public class LuckPermsPermissionFactory { - - public static final UUID CONSOLE = new UUID(0, 0); +public class LuckPermsPermissionFactory extends PermissionDefaultResolver { private static final Supplier USER_MANAGER = () -> LuckPermsProvider.get().getUserManager(); - public static PermissionResolver create(Class playerType, Class consoleType, Function uuidProvider) { - return PermissionResolver.createDefault(new ComplexResolver<>(playerType, consoleType, uuidProvider)); - } - - public static PermissionResolver create(Class senderType, Function uuidProvider) { - return PermissionResolver.createDefault(senderType, (sender, permission) -> hasPermission(uuidProvider.apply(sender), permission)); + public LuckPermsPermissionFactory() { + super((sender, permission) -> hasPermission(sender, permission)); } - private static boolean hasPermission(UUID sender, String permission) { - if (sender == null) { - return false; - } - if (CONSOLE.equals(sender)) { + private static boolean hasPermission(PlatformSender platformSender, String permission) { + Identifier identifier = platformSender.getIdentifier(); + if (identifier.equals(Identifier.CONSOLE)) { return true; } + UUID sender = identifier.getIdentifier(UUID.class) + .orElseThrow(() -> new IllegalArgumentException(platformSender.getHandle().getClass().getSimpleName() + " does not have UUID identifier!")); + UserManager userManager = USER_MANAGER.get(); User user = userManager.isLoaded(sender) ? userManager.getUser(sender) - : userManager.loadUser(sender).join(); + : userManager.loadUser(sender).join(); // TODO: Handle async if (user == null) { return false; @@ -47,28 +40,4 @@ private static boolean hasPermission(UUID sender, String permission) { return user.getCachedData().getPermissionData(QueryOptions.nonContextual()).checkPermission(permission).asBoolean(); } - private static class ComplexResolver implements BiPredicate { - private final Class playerType; - private final Class consoleType; - private final Function uuidProvider; - - public ComplexResolver(Class playerType, Class consoleType, Function uuidProvider) { - this.playerType = playerType; - this.consoleType = consoleType; - this.uuidProvider = uuidProvider; - } - - @Override - public boolean test(PlatformSender sender, String permission) { - Object handle = sender.getHandle(); - if (playerType.isAssignableFrom(handle.getClass())) { - PLAYER player = playerType.cast(handle); - UUID uuid = uuidProvider.apply(player); - return hasPermission(uuid, permission); - } - - return consoleType.isAssignableFrom(handle.getClass()); - } - } - }