Skip to content

Commit

Permalink
simplify my own code
Browse files Browse the repository at this point in the history
  • Loading branch information
Rollczi committed Mar 2, 2025
1 parent 6856db4 commit aa99d32
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 65 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -23,18 +20,17 @@ public String getName() {

@Override
public Identifier getIdentifier() {
List<Object> 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;
}

}
Original file line number Diff line number Diff line change
@@ -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<UserManager> USER_MANAGER = () -> LuckPermsProvider.get().getUserManager();

public static <PLAYER, CONSOLE> PermissionResolver create(Class<PLAYER> playerType, Class<CONSOLE> consoleType, Function<PLAYER, @Nullable UUID> uuidProvider) {
return PermissionResolver.createDefault(new ComplexResolver<>(playerType, consoleType, uuidProvider));
}

public static <SENDER> PermissionResolver create(Class<SENDER> senderType, Function<SENDER, @Nullable UUID> 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;
Expand All @@ -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<PLAYER, CONSOLE> implements BiPredicate<PlatformSender, String> {
private final Class<PLAYER> playerType;
private final Class<CONSOLE> consoleType;
private final Function<PLAYER, UUID> uuidProvider;

public ComplexResolver(Class<PLAYER> playerType, Class<CONSOLE> consoleType, Function<PLAYER, UUID> 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());
}
}

}

0 comments on commit aa99d32

Please sign in to comment.