Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 87 additions & 89 deletions src/main/java/com/fibermc/essentialcommands/ECPerms.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ public static void register(
}

registerNode.accept(CommandManager.literal("lastPos")
.requires(ECPerms.require("essentialcommands.admin.lastpos", 2))
.requires(ECPerms.require(ECPerms.Registry.admin_last_pos, 2))
.then(argument("target_player", StringArgumentType.word())
.executes((context) -> {
var targetPlayerName = StringArgumentType.getString(context, "target_player");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.fibermc.essentialcommands;

import com.fibermc.essentialcommands.access.ServerPlayerEntityAccess;
import com.fibermc.essentialcommands.permission.PermissionNode;
import com.fibermc.essentialcommands.types.MinecraftLocation;
import net.minecraft.network.message.MessageType;
import net.minecraft.server.network.ServerPlayerEntity;
Expand Down Expand Up @@ -80,7 +81,7 @@ private static void execTeleport(ServerPlayerEntity playerEntity, MinecraftLocat
);
}

public static boolean playerHasTpRulesBypass(ServerPlayerEntity player, String permission) {
public static boolean playerHasTpRulesBypass(ServerPlayerEntity player, PermissionNode permission) {
return (
(player.hasPermissionLevel(4) && CONFIG.OPS_BYPASS_TELEPORT_RULES)
|| ECPerms.check(player.getCommandSource(), permission, 5)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.fibermc.essentialcommands.config;

import com.fibermc.essentialcommands.ECPerms;
import com.fibermc.essentialcommands.permission.NumericPermissionGroup;
import dev.jpcode.eccore.config.Config;
import dev.jpcode.eccore.config.ConfigOption;
import dev.jpcode.eccore.config.ConfigUtil;
Expand Down Expand Up @@ -76,7 +77,7 @@ public final class EssentialCommandsConfig extends Config<EssentialCommandsConfi
public EssentialCommandsConfig(Path savePath, String displayName, String documentationLink) {
super(savePath, displayName, documentationLink);
HOME_LIMIT.changeEvent.register(newValue ->
ECPerms.Registry.Group.home_limit_group = ECPerms.makeNumericPermissionGroup("essentialcommands.home.limit", newValue)
ECPerms.Registry.Group.home_limit_group = NumericPermissionGroup.create("essentialcommands.home.limit", newValue)
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.fibermc.essentialcommands.permission;

import java.util.Collection;
import java.util.Comparator;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class NumericPermissionGroup extends PermissionGroup<NumericPermissionNode> {
private NumericPermissionGroup(Collection<NumericPermissionNode> nodes) {
super(nodes);
}

public static NumericPermissionGroup create(String basePermission, Collection<Integer> numericValues) {
String trueBasePermission = basePermission.endsWith(".") ? basePermission : basePermission + ".";
var nodes = numericValues.stream()
.sorted(Comparator.comparingInt(a -> -a)) // Order Descending
.map(num -> new NumericPermissionNode(trueBasePermission, num))
.toList();

return new NumericPermissionGroup(nodes);
}

public NumericPermissionNode getHighest() {
return super.nodes.get(0);
}

public NumericPermissionNode getLowest() {
return super.nodes.get(super.nodes.size() - 1);
}

public Optional<NumericPermissionNode> getHighestGranted(Predicate<PermissionNode> checkGrantedFn) {
return super.nodes.stream()
.filter(checkGrantedFn)
.findFirst();
}

public Optional<NumericPermissionNode> getLowestGranted(Predicate<PermissionNode> checkGrantedFn) {
var iterator = super.nodes.listIterator();
return Stream.generate(iterator::previous).limit(super.nodes.size())
.filter(checkGrantedFn)
.findFirst();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.fibermc.essentialcommands.permission;

public class NumericPermissionNode extends PermissionNode {

private final int numericValue;

public NumericPermissionNode(String node, int numericValue) {
super(node + numericValue);
this.numericValue = numericValue;
}

public int getNumericValue() {
return numericValue;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.fibermc.essentialcommands.permission;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;

public class PermissionGroup<TNode extends PermissionNode> {
protected final List<TNode> nodes;

public PermissionGroup(Collection<TNode> nodes) {
this.nodes = nodes.stream().toList();
}

public List<TNode> toList() {
return nodes.stream().toList();
}

public Stream<String> streamStrings() {
return nodes.stream().map(PermissionNode::getString);
}

public Stream<TNode> streamNodes() {
return nodes.stream();
}

public static PermissionGroup<PermissionNode> of(PermissionNode... nodes) {
return new PermissionGroup<>(Arrays.stream(nodes).toList());
}

public static PermissionGroup<PermissionNode> ofStrings(String... nodes) {
return new PermissionGroup<>(Arrays.stream(nodes).map(PermissionNode::new).toList());
}

public int size() {
return nodes.size();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.fibermc.essentialcommands.permission;

public class PermissionNode {

final String node;

public PermissionNode(String node) {
this.node = node;
}

public String getString() {
return node;
}

// public boolean equals(PermissionNode other) {
// return this.getString().equals(other.getString());
// }
}