main commit
This commit is contained in:
parent
b8b09db7a2
commit
810fd632ff
21
README.md
21
README.md
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user