main commit

This commit is contained in:
creeper 2026-01-14 16:00:23 +01:00
parent b8b09db7a2
commit 810fd632ff
3 changed files with 136 additions and 5 deletions

View File

@ -1,3 +1,22 @@
# OperatorWhitelist # OperatorWhitelist
Only allow certain player names (in a config) to have op and deop + ban others for security reasons. Only allow certain player names (in a config) to have op and deop + ban others for security reasons.
## Features
- Uses plugins/OperatorWhitelist/config.yml
- Automatically deops and bans unauthorized operators
- In-game whitelist management command
- Permission-based access
## Commands
/opwhitelist add <player>
/opwhitelist remove <player>
## Permission
operatorwhitelist.manage (default: false)
## Behavior
If a player joins with OP and is not in the whitelist:
- They are de-opped
- They are banned
- They are kicked instantly

View File

@ -1,17 +1,119 @@
package at.creeperjaegermax.operatorwhitelist; package at.creeperjaegermax.operatorwhitelist;
import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
public final class OperatorWhitelist extends JavaPlugin { import java.util.List;
public final class OperatorWhitelist extends JavaPlugin implements Listener {
private FileConfiguration config;
@Override @Override
public void onEnable() { public void onEnable() {
// Plugin startup logic saveDefaultConfig();
config = getConfig();
Bukkit.getPluginManager().registerEvents(this, this);
getLogger().info("OperatorWhitelist enabled.");
} }
@Override @Override
public void onDisable() { public void onDisable() {
// Plugin shutdown logic getLogger().info("OperatorWhitelist disabled.");
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (player.isOp()) {
if (!isWhitelisted(player.getName())) {
player.setOp(false);
String reason = "Unauthorized operator detected.";
Bukkit.getBanList(BanList.Type.NAME).addBan(player.getName(), reason, null, "OperatorWhitelist");
player.kickPlayer(reason);
getLogger().warning("Banned unauthorized operator: " + player.getName());
}
}
}
private boolean isWhitelisted(String name) {
List<String> list = config.getStringList("whitelist");
for (String s : list) {
if (s.equalsIgnoreCase(name)) {
return true;
}
}
return false;
}
private void saveWhitelist(List<String> list) {
config.set("whitelist", list);
saveConfig();
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!command.getName().equalsIgnoreCase("opwhitelist")) {
return false;
}
if (!sender.hasPermission("operatorwhitelist.manage")) {
sender.sendMessage("§cYou do not have permission to do that.");
return true;
}
if (args.length != 2) {
sender.sendMessage("§cUsage: /opwhitelist <add|remove> <player>");
return true;
}
String action = args[0];
String playerName = args[1];
List<String> list = config.getStringList("whitelist");
if (action.equalsIgnoreCase("add")) {
if (isWhitelisted(playerName)) {
sender.sendMessage("§ePlayer already whitelisted.");
return true;
}
list.add(playerName);
saveWhitelist(list);
sender.sendMessage("§aAdded " + playerName + " to operator whitelist.");
return true;
}
if (action.equalsIgnoreCase("remove")) {
boolean removed = list.removeIf(s -> s.equalsIgnoreCase(playerName));
if (!removed) {
sender.sendMessage("§ePlayer not in whitelist.");
return true;
}
saveWhitelist(list);
sender.sendMessage("§aRemoved " + playerName + " from operator whitelist.");
return true;
}
sender.sendMessage("§cUsage: /opwhitelist <add|remove> <player>");
return true;
} }
} }

View File

@ -1,3 +1,13 @@
name: OperatorWhitelist name: OperatorWhitelist
version: '${project.version}' version: '1.0'
main: at.creeperjaegermax.operatorwhitelist.OperatorWhitelist main: at.creeperjaegermax.operatorwhitelist.OperatorWhitelist
commands:
opwhitelist:
description: Manage operator whitelist
usage: /opwhitelist <add|remove> <player>
permissions:
operatorwhitelist.manage:
description: Allows managing the operator whitelist
default: false