Skip to content

Commit 914e53d

Browse files
author
david
committed
Add PermissionServiceWrapper to wrap Vault permissions
Introduced PermissionServiceWrapper and WrappedPermissionHolder to encapsulate Vault's Permission functionalities. Modified ServicePlugin to register the PermissionServiceWrapper, ensuring permission management is integrated with Vault.
1 parent 67dfd99 commit 914e53d

File tree

3 files changed

+125
-1
lines changed

3 files changed

+125
-1
lines changed

plugin/src/main/java/net/thenextlvl/service/ServicePlugin.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import net.thenextlvl.service.wrapper.VaultPermissionServiceWrapper;
2626
import net.thenextlvl.service.wrapper.service.ChatServiceWrapper;
2727
import net.thenextlvl.service.wrapper.service.EconomyServiceWrapper;
28+
import net.thenextlvl.service.wrapper.service.PermissionServiceWrapper;
2829
import org.bstats.bukkit.Metrics;
2930
import org.bstats.charts.SimplePie;
3031
import org.bukkit.plugin.ServicePriority;
@@ -145,7 +146,10 @@ private void hookPermissionService(String name, Callable<? extends PermissionCon
145146
}
146147

147148
private void loadServicePermissionWrapper() {
148-
149+
getServer().getServicesManager().getRegistrations(Permission.class).forEach(provider -> {
150+
var wrapper = new PermissionServiceWrapper(provider.getProvider(), this);
151+
getServer().getServicesManager().register(PermissionController.class, wrapper, provider.getPlugin(), provider.getPriority());
152+
});
149153
}
150154

151155
private void loadServiceEconomyWrapper() {
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package net.thenextlvl.service.wrapper.service;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import net.milkbowl.vault.permission.Permission;
5+
import net.thenextlvl.service.ServicePlugin;
6+
import net.thenextlvl.service.api.permission.PermissionController;
7+
import net.thenextlvl.service.api.permission.PermissionHolder;
8+
import net.thenextlvl.service.wrapper.service.model.WrappedPermissionHolder;
9+
import org.bukkit.OfflinePlayer;
10+
import org.bukkit.World;
11+
import org.bukkit.entity.Player;
12+
import org.jetbrains.annotations.Nullable;
13+
14+
import java.util.Optional;
15+
import java.util.UUID;
16+
import java.util.concurrent.CompletableFuture;
17+
18+
@RequiredArgsConstructor
19+
public class PermissionServiceWrapper implements PermissionController {
20+
private final Permission permission;
21+
private final ServicePlugin plugin;
22+
23+
@Override
24+
public CompletableFuture<PermissionHolder> loadPermissionHolder(OfflinePlayer player) {
25+
return CompletableFuture.completedFuture(getPermissionHolder(player).orElse(null));
26+
}
27+
28+
@Override
29+
public CompletableFuture<PermissionHolder> loadPermissionHolder(OfflinePlayer player, World world) {
30+
return CompletableFuture.completedFuture(getPermissionHolder(player, world).orElse(null));
31+
}
32+
33+
@Override
34+
public CompletableFuture<PermissionHolder> loadPermissionHolder(UUID uuid) {
35+
return CompletableFuture.completedFuture(getPermissionHolder(uuid).orElse(null));
36+
}
37+
38+
@Override
39+
public CompletableFuture<PermissionHolder> loadPermissionHolder(UUID uuid, World world) {
40+
return CompletableFuture.completedFuture(getPermissionHolder(uuid, world).orElse(null));
41+
}
42+
43+
@Override
44+
public Optional<PermissionHolder> getPermissionHolder(OfflinePlayer player) {
45+
return getPermissionHolder(player.getPlayer(), null);
46+
}
47+
48+
@Override
49+
public Optional<PermissionHolder> getPermissionHolder(OfflinePlayer player, World world) {
50+
return getPermissionHolder(player.getPlayer(), world);
51+
}
52+
53+
@Override
54+
public Optional<PermissionHolder> getPermissionHolder(UUID uuid) {
55+
return getPermissionHolder(plugin.getServer().getPlayer(uuid), null);
56+
}
57+
58+
@Override
59+
public Optional<PermissionHolder> getPermissionHolder(UUID uuid, World world) {
60+
return getPermissionHolder(plugin.getServer().getPlayer(uuid), world);
61+
}
62+
63+
private Optional<PermissionHolder> getPermissionHolder(@Nullable Player player, @Nullable World world) {
64+
return Optional.ofNullable(player).map(online -> new WrappedPermissionHolder(world, online, permission));
65+
}
66+
67+
@Override
68+
public String getName() {
69+
return permission.getName();
70+
}
71+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package net.thenextlvl.service.wrapper.service.model;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import net.kyori.adventure.util.TriState;
5+
import net.milkbowl.vault.permission.Permission;
6+
import net.thenextlvl.service.api.permission.PermissionHolder;
7+
import org.bukkit.World;
8+
import org.bukkit.entity.Player;
9+
import org.jetbrains.annotations.Nullable;
10+
11+
import java.util.Optional;
12+
import java.util.function.Function;
13+
14+
@RequiredArgsConstructor
15+
public class WrappedPermissionHolder implements PermissionHolder {
16+
private final @Nullable World world;
17+
private final Player holder;
18+
private final Permission permission;
19+
20+
@Override
21+
public TriState checkPermission(String permission) {
22+
return TriState.byBoolean(this.permission.playerHas(world != null ? world.getName() : null, holder, permission));
23+
}
24+
25+
@Override
26+
public boolean addPermission(String permission) {
27+
return this.permission.playerAdd(world != null ? world.getName() : null, holder, permission);
28+
}
29+
30+
@Override
31+
public boolean removePermission(String permission) {
32+
return this.permission.playerRemove(world != null ? world.getName() : null, holder, permission);
33+
}
34+
35+
@Override
36+
public <T> Optional<T> getInfoNode(String key, Function<@Nullable String, @Nullable T> mapper) {
37+
return Optional.empty();
38+
}
39+
40+
@Override
41+
public boolean removeInfoNode(String key) {
42+
return false;
43+
}
44+
45+
@Override
46+
public boolean setInfoNode(String key, String value) {
47+
return false;
48+
}
49+
}

0 commit comments

Comments
 (0)