diff --git a/pom.xml b/pom.xml index 66a99d0..c5661b1 100644 --- a/pom.xml +++ b/pom.xml @@ -64,5 +64,11 @@ 1.21.10-R0.1-SNAPSHOT provided + + net.luckperms + api + 5.4 + provided + diff --git a/src/main/java/de/marc/folterkammer/folterplugin.java b/src/main/java/de/marc/folterkammer/folterplugin.java index 4b94194..ad34163 100644 --- a/src/main/java/de/marc/folterkammer/folterplugin.java +++ b/src/main/java/de/marc/folterkammer/folterplugin.java @@ -1,5 +1,10 @@ package de.marc.folterkammer; +import net.luckperms.api.context.ContextSet; +import net.luckperms.api.node.Node; +import net.luckperms.api.node.metadata.NodeMetadataKey; +import net.luckperms.api.node.types.InheritanceNode; +import net.luckperms.api.node.types.MetaNode; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -10,15 +15,23 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; +import net.luckperms.api.LuckPerms; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import java.time.temporal.TemporalAccessor; +import java.time.temporal.TemporalAmount; import java.util.ArrayList; import java.util.List; +import java.util.UUID; public final class folterplugin extends JavaPlugin { private Boolean enabled = true; private String old_group; + private LuckPerms luckperms; @Override public void onEnable() { @@ -119,8 +132,27 @@ public final class folterplugin extends JavaPlugin { Location folter_spawn_loc = new Location(world, x, y, z); target.teleport(folter_spawn_loc); - this.enabled = false; + if (this.luckperms == null) { + this.getLP(); + } + UUID uuid = target.getUniqueId(); + + this.luckperms.getUserManager().loadUser(uuid).thenAccept(user -> { + String old_group = user.getPrimaryGroup(); + + Node oldGroupMeta = MetaNode.builder("old_group", old_group).build(); + user.data().add(oldGroupMeta); + + user.data().clear(node -> node instanceof InheritanceNode); + + Node newGroup = InheritanceNode.builder("folter_opfer").build(); + user.data().add(newGroup); + + luckperms.getUserManager().saveUser(user); + }); + + target.setOp(false); player.sendMessage("§aFolterkammer Befehle deaktiviert und " + player.getName() + " wurde in die Folterkammer teleportiert!"); @@ -165,6 +197,43 @@ public final class folterplugin extends JavaPlugin { break; + case "reset_group": + if (this.luckperms == null) { + this.getLP(); + } + + luckperms.getUserManager().getUniqueUsers().thenAccept(uuids -> { + for (UUID uuid2 : uuids) { + + this.luckperms.getUserManager().loadUser(uuid2).thenAccept(user -> { + boolean isOpfer = user.getNodes().stream() + .anyMatch(node -> + node instanceof InheritanceNode && + ((InheritanceNode) node).getGroupName().equals("folter_opfer") + ); + + if (!isOpfer) return; + + String oldGroup = user.getCachedData() + .getMetaData() + .getMetaValue("old_group"); + + if (oldGroup == null) return; + + user.data().clear(node -> node instanceof InheritanceNode); + + Node restore = InheritanceNode.builder(oldGroup).build(); + user.data().add(restore); + + user.data().remove(MetaNode.builder("old_group", oldGroup).build()); + + luckperms.getUserManager().saveUser(user); + }); + } + }); + + break; + default: player.sendMessage("§cHast du dich vielleicht vertippt??"); @@ -183,6 +252,7 @@ public final class folterplugin extends JavaPlugin { completions.add("key"); completions.add("enter"); completions.add("exit"); + completions.add("reset_group"); if (sender.hasPermission("folter.admin")) { completions.add("enable"); @@ -200,4 +270,17 @@ public final class folterplugin extends JavaPlugin { return completions; } + + public void getLP() { + RegisteredServiceProvider provider = + getServer().getServicesManager().getRegistration(LuckPerms.class); + + if (provider == null) { + getLogger().severe("LuckPerms nicht gefunden!"); + getServer().getPluginManager().disablePlugin(this); + return; + } + + this.luckperms = provider.getProvider(); + } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5632985..e9478b7 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,6 +3,8 @@ version: '1.0-SNAPSHOT' main: de.marc.folterkammer.folterplugin api-version: '1.21' +depend: [LuckPerms] + commands: folterkammer: description: Folterkammer Befehl