- Баллы
- 76
CommandWhitelist (NMS) - белый список команд
Требования: Spigot
Последняя версия: 0.3
Описание: Данный плагин блокирует и скрывает все команды на которых у игрока нет права "commandwhitelist.override.<разрешённая команда тут>".
Команды: Отсутствуют
Права: commandwhitelist.override.<разрешённая команда тут> - разрешает использовать команду введённую вместо "<разрешённая команда тут>" (символ "/" в начале не требуется)
Конфиг: Отсутствует
Требования: Spigot
Последняя версия: 0.3
Описание: Данный плагин блокирует и скрывает все команды на которых у игрока нет права "commandwhitelist.override.<разрешённая команда тут>".
Команды: Отсутствуют
Права: commandwhitelist.override.<разрешённая команда тут> - разрешает использовать команду введённую вместо "<разрешённая команда тут>" (символ "/" в начале не требуется)
Конфиг: Отсутствует
Скачать 1_12_R1 : CommandWhitelist_v0.3_v1_12_R1.jar
Скачать 1_11_R1 : CommandWhitelist_v0.3_v1_11_R1.jar
Скачать 1_10_R1 : CommandWhitelist_v0.3_v1_10_R1.jar
Скачать 1_9_R2 : CommandWhitelist_v0.3_v1_9_R2.jar
Скачать 1_8_R3 : CommandWhitelist_v0.3_v1_8_R3.jar
Скачать 1_11_R1 : CommandWhitelist_v0.3_v1_11_R1.jar
Скачать 1_10_R1 : CommandWhitelist_v0.3_v1_10_R1.jar
Скачать 1_9_R2 : CommandWhitelist_v0.3_v1_9_R2.jar
Скачать 1_8_R3 : CommandWhitelist_v0.3_v1_8_R3.jar
Скачать 1_12_R1 : CommandWhitelist_v0_2_v1_12_R1.jar
Скачать 1_11_R1 : CommandWhitelist_v0_2_v1_11_R1.jar
Скачать 1_10_R1 : CommandWhitelist_v0_2_v1_10_R1.jar
Скачать 1_9_R2 : CommandWhitelist_v0_2_v1_9_R2.jar
Скачать 1_8_R3 : CommandWhitelist_v0_2_v1_8_R3.jar
Скачать 1_11_R1 : CommandWhitelist_v0_2_v1_11_R1.jar
Скачать 1_10_R1 : CommandWhitelist_v0_2_v1_10_R1.jar
Скачать 1_9_R2 : CommandWhitelist_v0_2_v1_9_R2.jar
Скачать 1_8_R3 : CommandWhitelist_v0_2_v1_8_R3.jar
Скачать 1_12_R1 : CommandWhitelist_v0_1_v1_12_R1.jar
Скачать 1_11_R1 : CommandWhitelist_v0_1_v1_11_R1.jar
Скачать 1_10_R1 : CommandWhitelist_v0_1_v1_10_R1.jar
Скачать 1_9_R2 : CommandWhitelist_v0_1_v1_9_R2.jar
Скачать 1_8_R3 : CommandWhitelist_v0_1_v1_8_R3.jar
Скачать 1_11_R1 : CommandWhitelist_v0_1_v1_11_R1.jar
Скачать 1_10_R1 : CommandWhitelist_v0_1_v1_10_R1.jar
Скачать 1_9_R2 : CommandWhitelist_v0_1_v1_9_R2.jar
Скачать 1_8_R3 : CommandWhitelist_v0_1_v1_8_R3.jar
- Не требует зависимости ProtocolLib
- Не имеет ошибки которая не позволяла получить корректный список разрешённых команд если часть команды уже введена. (Набирать команду с использованием авто заполнения проще и быстрее)
- Op и '*' не дают право использовать все команды. (Даёт возможность ограничивать команды у op и '*')
- Останавливает исполнение команды путём отмены пакета (Проверка проходит до того как сервер узнает что игрок ввёл команду. Меньшая вероятность срабатывания возможного бэкдора-команды) [Добавлено в версии v0.2]
Код:
public final class CommandWhitelist extends JavaPlugin {
public final void onEnable() {
Bukkit.getPluginManager().registerEvents(new Listener() {
private final PacketPlayOutChat unknowncommandmessagepacket = new PacketPlayOutChat(new ChatMessage(YamlConfiguration.loadConfiguration(new File("spigot.yml")).getString("messages.unknown-command" ,"Unknown command.")), ChatMessageType.SYSTEM);
@EventHandler
public final void onJoin(PlayerJoinEvent event) {
CraftPlayer player = (CraftPlayer) event.getPlayer();
PlayerConnection connection = player.getHandle().playerConnection;
connection.networkManager.channel.pipeline().addBefore("packet_handler", "commandwhitelist", new ChannelDuplexHandler() {
private int hashcode = 0;
private final HashSet<String> allowedcommands = new HashSet<String>();
private final HashSet<String> getAllowedCommands() {
Set<PermissionAttachmentInfo> effectivepermissions = player.getEffectivePermissions();
int hashcode = effectivepermissions.hashCode();
if(this.hashcode == hashcode) {
return allowedcommands;
}
allowedcommands.clear();
this.hashcode = hashcode;
effectivepermissions.forEach(effectivepermission -> {
String permissionname = effectivepermission.getPermission();
if(effectivepermission.getValue() && permissionname.startsWith("commandwhitelist.override.")) {
String command = permissionname.substring(26);
allowedcommands.add(command);
}
});
return allowedcommands;
}
private final String[] getCompletions(String command) {
List<String> tosendcompletions = new ArrayList<String>();
getAllowedCommands().forEach(completion -> {
if(completion.startsWith(command)) {
tosendcompletions.add("/".concat(completion));
}
});
return tosendcompletions.toArray(new String[tosendcompletions.size()]);
}
@Override
public final void channelRead(ChannelHandlerContext context, Object packet) throws Exception {
if (packet instanceof PacketPlayInTabComplete) {
PacketPlayInTabComplete info = (PacketPlayInTabComplete) packet;
String command = info.a().trim().toLowerCase();
if(command.startsWith("/")) {
int endindex = command.indexOf(" ", 1);
if(endindex == -1) {
PacketPlayOutTabComplete tabcompletepacket = new PacketPlayOutTabComplete(getCompletions(command.substring(1)));
connection.sendPacket(tabcompletepacket);
return;
} else if(!getAllowedCommands().contains(command.substring(1, endindex))) {
return;
}
}
}
if (packet instanceof PacketPlayInChat) {
PacketPlayInChat info = (PacketPlayInChat) packet;
String command = info.a().trim();
if(command.startsWith("/")) {
int endindex = command.indexOf(" ", 1);
if(endindex==-1) endindex=command.length();
command = command.substring(1, endindex).toLowerCase();
if(!getAllowedCommands().contains(command)) {
connection.sendPacket(unknowncommandmessagepacket);
return;
}
}
}
super.channelRead(context, packet);
}
});
}
}, this);
}
}
v0.3
v0.2
- Добавлено кеширование доступных команд
- Исправлено кратковременное отключение плагина во время перезагрузки
v0.1
- Изменён способ отмены исполнения не разрешённых команд
- Исправлены потенциальные проблемы совместимости
- Оптимизирован способ получения сообщения запрета исполнения
- Релиз
Последнее редактирование: