1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Плагин [ADMIN/SEC] CommandWhitelist v0.3 (NMS) [1.8-1.12.2] - белый список команд

Тема в разделе "Неподтвержденные плагины", создана пользователем Bomb, 2 апр 2021.

?

Плагин вам пригодился?

  1. Да (пригодился)

    10 голосов
    76,9%
  2. Нет (не пригодился)

    3 голосов
    23,1%
  3. Другое

    0 голосов
    0,0%
  1. Автор темы
    Bomb

    Bomb Активный участник Пользователь

    Баллы:
    76
    CommandWhitelist (NMS) - белый список команд
    Требования:
    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_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_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

    • Не требует зависимости 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);
        }
    }
    

     
    Последнее редактирование: 24 сен 2023
  2. Overwrite

    Overwrite Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    artcart
    Как по мне это было лишь в плюс плагину, ведь он таким образом запрещал просматривать все команды на серваке.(да, отключить автокомплит можно и в настойках иных блокираторов, но в оригинале он работал довольно неплохо, показывая лишь команды из вайтлиста) Если "умник" не увидит лишнего, он будет банально в смятении. Запутать любителя обходов - бесценно, а смотреть как он мучается от непонимания, почему его любимые команды не работают - дико весело.
     
  3. Автор темы
    Bomb

    Bomb Активный участник Пользователь

    Баллы:
    76
    Плагин и сейчас запрещает просматривать все запрещённые команды. Баг проявлялся во время просмотра всех разрешённых команд. Приведу пример как это проявлялось: Игроку разрешены команды /teleport /tell и /testforblock. Игрок хочет ввести команду /testforblock. Вводит первую часть /test и нажимает tab чтобы не вводить дальше. По идее автозаполнение должно было бы вернуть ему /testforblock но из за недоработки старый CommandWhitelist не учитывал что игрок уже ввёл /test а сразу возвращал список сначала то есть /teleport, /tell , /testforblock и приходилось бы ещё 2 раза тыкать в tab. Новый CommandWhitelist учитывает уже введённую часть /test и вернёт игроку /testforblock сразу. Я привёл пример с 3 командами, а их обычно гораздо больше.
     
  4. Автор темы
    Bomb

    Bomb Активный участник Пользователь

    Баллы:
    76
    А вот с этим я согласен с тобой на 100%
     
  5. YourAlt

    YourAlt Активный участник Пользователь

    Баллы:
    66
    Превосходный плагин!
     
  6. Dohonub0005

    Dohonub0005 Новичок Пользователь

    Баллы:
    6
    Я как раз искал такой плагин. Спасибо
     

Поделиться этой страницей