diff --git a/pom.xml b/pom.xml
index 56da438..3028329 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,14 +14,7 @@
8
UTF-8
-
-
- org.spigotmc
- spigot-api
- 1.12-R0.1-SNAPSHOT
- provided
-
-
+
spigotmc-repo
@@ -33,4 +26,25 @@
+
+
+ org.spigotmc
+ spigot-api
+ 1.8.8-R0.1-SNAPSHOT
+ provided
+
+
+ net.luckperms
+ api
+ 5.4
+ provided
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.28
+ provided
+
+
\ No newline at end of file
diff --git a/src/main/java/me/firephoenix/anticheatmanager/AnticheatManager.java b/src/main/java/me/firephoenix/anticheatmanager/AnticheatManager.java
index 779659e..07962ff 100644
--- a/src/main/java/me/firephoenix/anticheatmanager/AnticheatManager.java
+++ b/src/main/java/me/firephoenix/anticheatmanager/AnticheatManager.java
@@ -1,17 +1,53 @@
package me.firephoenix.anticheatmanager;
+import lombok.Getter;
+import lombok.Setter;
+import me.firephoenix.anticheatmanager.cmds.AnticheatManagerGUI;
+import me.firephoenix.anticheatmanager.cmds.AnticheatSelector;
+import me.firephoenix.anticheatmanager.listener.InvClick;
+import net.luckperms.api.LuckPerms;
+import org.bukkit.Bukkit;
+import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
+import java.util.logging.Level;
+
+@Getter
+@Setter
public final class AnticheatManager extends JavaPlugin {
+ public static AnticheatManager INSTANCE;
+
+ public LuckPerms luckPermsAPI;
+
@Override
public void onEnable() {
// Plugin startup logic
+ setInstance(this);
+ saveDefaultConfig();
+
+ getCommand("anticheatselect").setExecutor(new AnticheatSelector());
+
+ getCommand("anticheatgui").setExecutor(new AnticheatManagerGUI());
+
+ getServer().getPluginManager().registerEvents(new InvClick(), this);
+
+ RegisteredServiceProvider provider = Bukkit.getServicesManager().getRegistration(LuckPerms.class);
+ if (provider != null) {
+ luckPermsAPI = provider.getProvider();
+ } else {
+ getLogger().log(Level.SEVERE, "LuckPerms API is not available, disabling...");
+ onDisable();
+ }
}
@Override
public void onDisable() {
// Plugin shutdown logic
}
+
+ public void setInstance(AnticheatManager INSTANCE) {
+ AnticheatManager.INSTANCE = INSTANCE;
+ }
}
diff --git a/src/main/java/me/firephoenix/anticheatmanager/cmds/AnticheatManagerGUI.java b/src/main/java/me/firephoenix/anticheatmanager/cmds/AnticheatManagerGUI.java
index 34f9565..dac96be 100644
--- a/src/main/java/me/firephoenix/anticheatmanager/cmds/AnticheatManagerGUI.java
+++ b/src/main/java/me/firephoenix/anticheatmanager/cmds/AnticheatManagerGUI.java
@@ -1,8 +1,44 @@
package me.firephoenix.anticheatmanager.cmds;
+import me.firephoenix.anticheatmanager.AnticheatManager;
+import me.firephoenix.anticheatmanager.util.ItemBuilder;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+
+import java.util.List;
+
/**
* @author NieGestorben
* Copyright© (c) 2023, All Rights Reserved.
*/
-public class AnticheatManagerGUI {
+public class AnticheatManagerGUI implements CommandExecutor {
+
+
+ @Override
+ public boolean onCommand(CommandSender commandSender, Command command, String string, String[] args) {
+ Player player = AnticheatManager.INSTANCE.getServer().getPlayer(commandSender.getName());
+ if (player != null) {
+ List anticheatList = AnticheatManager.INSTANCE.getConfig().getStringList("name-list");
+ Inventory inventory = Bukkit.createInventory(player, 27, "Anticheats");
+ for (int i = 0; i < inventory.getSize(); i++) {
+ inventory.setItem(i, new ItemBuilder(Material.STAINED_GLASS_PANE).toItemStack());
+ }
+ for (int i = 0; i < anticheatList.size(); i++) {
+ Material material = Material.valueOf(AnticheatManager.INSTANCE.getConfig().getString("anticheats." + anticheatList.get(i) + ".material"));
+ String name = AnticheatManager.INSTANCE.getConfig().getString("anticheats." + anticheatList.get(i) + ".name");
+ String version = AnticheatManager.INSTANCE.getConfig().getString("anticheats." + anticheatList.get(i) + ".version");
+ String price = AnticheatManager.INSTANCE.getConfig().getString("anticheats." + anticheatList.get(i) + ".price");
+ inventory.setItem(i, new ItemBuilder(material).setName(name).addLoreLine("Version: " + version).addLoreLine("Price: " + price).toItemStack());
+ }
+ player.openInventory(inventory);
+ return true;
+ }
+ return false;
+ }
+
}
diff --git a/src/main/java/me/firephoenix/anticheatmanager/cmds/AnticheatSelector.java b/src/main/java/me/firephoenix/anticheatmanager/cmds/AnticheatSelector.java
index 39a3baf..e55fb83 100644
--- a/src/main/java/me/firephoenix/anticheatmanager/cmds/AnticheatSelector.java
+++ b/src/main/java/me/firephoenix/anticheatmanager/cmds/AnticheatSelector.java
@@ -1,6 +1,75 @@
-package me.firephoenix.anticheatmanager.cmds;/**
+package me.firephoenix.anticheatmanager.cmds;
+
+import me.firephoenix.anticheatmanager.AnticheatManager;
+import net.luckperms.api.model.data.NodeMap;
+import net.luckperms.api.node.Node;
+import net.luckperms.api.node.NodeBuilder;
+import net.luckperms.api.node.NodeEqualityPredicate;
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
* @author NieGestorben
* Copyright© (c) 2023, All Rights Reserved.
*/
- public class AnticheatSelector {
+public class AnticheatSelector implements CommandExecutor {
+
+ @Override
+ public boolean onCommand(CommandSender commandSender, Command command, String string, String[] args) {
+ Player player = AnticheatManager.INSTANCE.getServer().getPlayer(commandSender.getName());
+ if (player == null) return false;
+ List anticheatList = AnticheatManager.INSTANCE.getConfig().getStringList("name-list");
+ if (args.length != 1) {
+ commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cUsage: acsel "));
+ return true;
+ }
+ if (anticheatList.isEmpty()) {
+ commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cNo Anticheats configured!"));
+ return true;
+ }
+ if (anticheatList.contains(args[0])) {
+ anticheatList.remove(args[0]);
+
+ String bypassPermission = AnticheatManager.INSTANCE.getConfig().getString("anticheats." + args[0] + ".bypass-permission");
+
+ // Manage permissions via luckperms, because that is what I use and this will only be a private plugin
+ if (AnticheatManager.INSTANCE.getLuckPermsAPI().getUserManager().getUser(player.getUniqueId()) == null) {
+ commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCouldn't manage permissions via the LuckPerms API!"));
+ return true;
+ }
+ Node permissionNode = Node.builder(bypassPermission).negated(true).build();
+ NodeMap permissions = AnticheatManager.INSTANCE.getLuckPermsAPI().getUserManager().getUser(player.getUniqueId()).data();
+
+ String anticheatname = AnticheatManager.INSTANCE.getConfig().getString("anticheats." + args[0] + ".name");
+ String anticheatVersion = AnticheatManager.INSTANCE.getConfig().getString("anticheats." + args[0] + ".version");
+
+ //Remove all other anticheat bypass permissions
+
+ anticheatList.forEach(anticheat -> {
+ String permission = AnticheatManager.INSTANCE.getConfig().getString("anticheats." + anticheat + ".bypass-permission");
+ Node permissionNode2 = Node.builder(permission).negated(true).build();
+ permissions.remove(permissionNode2);
+ });
+
+ commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cChanged Anticheat to " + anticheatname + " V" + anticheatVersion));
+
+ //Add bypass permission for selected anticheat
+
+ permissions.add(permissionNode);
+
+ AnticheatManager.INSTANCE.getLuckPermsAPI().getUserManager().saveUser(Objects.requireNonNull(AnticheatManager.INSTANCE.getLuckPermsAPI().getUserManager().getUser(player.getUniqueId())));
+ return true;
+ } else {
+ commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCouldn't find an anticheat with the name: " + args[0] + "."));
+ commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "List of all anticheats: " + anticheatList));
+ return true;
+ }
+ }
+
}
diff --git a/src/main/java/me/firephoenix/anticheatmanager/listener/InvClick.java b/src/main/java/me/firephoenix/anticheatmanager/listener/InvClick.java
index ebfb80c..a420ca8 100644
--- a/src/main/java/me/firephoenix/anticheatmanager/listener/InvClick.java
+++ b/src/main/java/me/firephoenix/anticheatmanager/listener/InvClick.java
@@ -1,8 +1,31 @@
package me.firephoenix.anticheatmanager.listener;
+import me.firephoenix.anticheatmanager.AnticheatManager;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+
/**
* @author NieGestorben
* Copyright© (c) 2023, All Rights Reserved.
*/
-public class InvClick {
+public class InvClick implements Listener {
+
+ @EventHandler
+ public void onInvClick(InventoryClickEvent e) {
+ Player player = (Player) e.getWhoClicked();
+ if (e.getCurrentItem() == null) {
+ return;
+ }
+ AnticheatManager.INSTANCE.getConfig().getStringList("name-list").forEach(name -> {
+ Material material = Material.valueOf(AnticheatManager.INSTANCE.getConfig().getString("anticheats." + name + ".material"));
+ String acName = AnticheatManager.INSTANCE.getConfig().getString("anticheats." + name + ".name");
+ if (e.getCurrentItem().getType() == material && e.getCurrentItem().getItemMeta().getDisplayName().equals(acName)) {
+ player.performCommand("acsel " + name);
+ }
+ });
+ }
+
}
diff --git a/src/main/java/me/firephoenix/anticheatmanager/util/ItemBuilder.java b/src/main/java/me/firephoenix/anticheatmanager/util/ItemBuilder.java
index b2af343..41995df 100644
--- a/src/main/java/me/firephoenix/anticheatmanager/util/ItemBuilder.java
+++ b/src/main/java/me/firephoenix/anticheatmanager/util/ItemBuilder.java
@@ -1,4 +1,4 @@
-package me.firephoenix.anticheatmanager.cmds.util;
+package me.firephoenix.anticheatmanager.util;
import org.bukkit.Color;
import org.bukkit.DyeColor;
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index e69de29..63555ac 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -0,0 +1,9 @@
+name-list: # List of all anticheats, please enter the exact same name as in anticheats.NAME, Max of 9 anticheats is currently supported.
+ - example
+anticheats:
+ example: # Name of the anticheat, only lowercase characters please
+ bypass-permission: inferno.bypass # Permission to bypass the anticheat
+ name: Example # Name of the anticheat but as a string, you can use lower and upper case characters!
+ version: 1.0.0 # Version of the anticheat
+ price: Free # Price (free if it's not paid)
+ material: BLAZE_POWDER # Bukkit Material for GUI, only <=1.8.8 Materials
\ No newline at end of file
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 2b8d011..04c9f7b 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,3 +1,14 @@
name: AnticheatManager
-version: '${project.version}'
+version: '1.0'
main: me.firephoenix.anticheatmanager.AnticheatManager
+commands:
+ anticheatselect:
+ description: Select an anticheat to test
+ usage: /anticheatsel
+ aliases: [acsel]
+ permission: anticheatmanager.select
+ anticheatgui:
+ description: Select an anticheat to test
+ usage: /anticheatgui
+ aliases: [ acgui ]
+ permission: anticheatmanager.gui