main commit
This commit is contained in:
parent
b8b09db7a2
commit
810fd632ff
21
README.md
21
README.md
|
|
@ -1,3 +1,22 @@
|
|||
# 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;
|
||||
|
||||
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;
|
||||
|
||||
public final class OperatorWhitelist extends JavaPlugin {
|
||||
import java.util.List;
|
||||
|
||||
public final class OperatorWhitelist extends JavaPlugin implements Listener {
|
||||
|
||||
private FileConfiguration config;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
// Plugin startup logic
|
||||
saveDefaultConfig();
|
||||
config = getConfig();
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(this, this);
|
||||
|
||||
getLogger().info("OperatorWhitelist enabled.");
|
||||
}
|
||||
|
||||
@Override
|
||||
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
|
||||
version: '${project.version}'
|
||||
version: '1.0'
|
||||
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