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

Плагин [MECH] CheckItem v2.0.1 Проверка предметов [Spigot - 1.8.8]

Тема в разделе "Неподтвержденные плагины", создана пользователем Korvinius, 15 ноя 2014.

  1. Автор темы
    Korvinius

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

    Баллы:
    88
    CheckItem - контролируем дюп и зачарования
    v.2.0.1
    [Spigot 1.7.x - 1.8.8]


    Вы хотите запретить клонировать предметы в творческом режиме?
    Вам нужно запретить брать отдельные материалы из креатив-инвентаря?
    Хотите запретить переименовывать или изменять свойства вещей в наковальне?
    Надоели раздачи и те, кто разбрасывается ценными вещами, строя из себя великих олигархов, и вы хотите запретить выбрасывать эти вещи из инвентаря?
    Вы хотите ограничить уровень и количество зачарований на вещах, на вашем сервере?


    Скачать плагин CheckItem для spigot 1.8.8+
    Скачать плагин CheckItem v1.2 для spigot 1.7 - 1.8
    Внимание, плагин CheckItem v1.2 для spigot 1.7 - 1.8 имеет более ограниченные возможности, см. историю версий.

    Особенности:
    • Запрет любого перемещения указанных преметов при включенном творческом режиме в инвентаре игрока, вещи уничтожаются. (конфиг: "items")
    • Запрет клонирования указанных преметов, с помощью средней клавиши мыши, при открытых любых других инвентарях (не инвентарь игрока), клонирование блокируется. (конфиг: "items")
    • Запрет брать указанные предметы из креатив инвентаря, предметы уничтожаются. (конфиг: "items")
    • Запрет выбрасывать указанные предметы из инвентаря при включенном творческом режиме, предметы уничтожаются. (конфиг: "items")
    • Запрет установки указанных блоков, при включенном творческом режиме, действие блокируется. (конфиг: "place")
    • Запрет одевания вещей при включенном творческом режиме с помощью ПКМ или Shift+ПКМ, действие блокируется. (конфиг: "armor")
    • Запрет помещения указанных предметов в рамки при включенном творческом режиме, действие блокируется. (конфиг: "items")
    • Запрет помещения/снятия указанных предметов на/с армор-стенд при включенном творческом режиме, действие блокируется. (конфиг: "items")
    • Запрет перемещения указанных предметов при открытом инвентаре наковальни, действие блокируется. (конфиг: "anvil")
    • Запрет выбрасывания из инвентаря указанных предметов, в режиме выживания, действие блокируется. (конфиг: "drops")
    • Ограничение максимального уровня на вещах, вещи удаляются (конфиг: "enchant.level")
    • Ограничение максимального количества зачарований на вещах, вещи удаляются (конфиг: "enchant.amount")
    Относительно ограничения уровня и количества зачарований, запрещенные предметы удаляются, проверка происходит в момент:
    • когда игрок берет предмет в руку,
    • когда игрок пытается переместить предмет в инвентаре,
    • когда игрок пытается кликнуть правой или левой кнопкой мыши, держа предмет в руке,
    • когда игрок наносит урон, держа предмет в руке (урон блокируется)
    • когда игрок пытается поместить предмет в рамку
    • когда игрок пытается поместить/снять предмет на/с армор-стенд
    • когда игрок пытается одеть на себя предмет с помощью RightClick или Shift+RightClick,
    • также, заблокирована возможность поднимать брошенные "запрещенные" предметы.
    Проверку "зачарований" можно отключить в конфиге, позиция "enchant.check: true/false",

    А также, чтобы знать нарушителей, кроме вывода сообщений в консоль, все манипуляции с запрещенными предметами записываются в отдельный лог-файл: plugins\CheckItem\Log\levels.log

    Права (Permissions):
    • checkitem.bypass.items - игнор ограничений в креативе
    • checkitem.bypass.armor - игнор ограничений одевания брони
    • checkitem.bypass.anvil - игнор ограничений наковальни
    • checkitem.bypass.drops - игнор ограничений дропа
    • checkitem.bypass.blockplace - игнор ограничений установки блоков
    • checkitem.bypass.enchant - игнор ограничений уровня и количества зачарований на вещах
    Проверку "разрешений" можно отключить в конфиге, позиция "permission: true/false", в этом случае, манипуляции с такими предметами будут запрещены всем, даже операторам и игрокам имеющим разрешение "*".

    Команды:
    (/checkitem ..., алиасы: /check, /chi)
    доступны всем:
    • /checkitem help - Подсказка.
    • /checkitem check - Проверить предмет в руке на наличие его в списках конфига
    доступны игрокам с правами: checkitem.admin
    • /checkitem reload - Перезагрузка конфига.
    • /checkitem add [arg] - Добавление предмета, который в руке в конфиг, где [arg] - это категория конфига, существующие категории:


    Основные пункты конфигурации (config.yml):
    Код:
    debug: true    #Включить вывод всех действий в консоль (true/false)
    anvil: true    #Включить проверку перемещения предметов при открытом инвентаре наковальни (true/false)
    items: true    #Включить проверку перемещения предметов в инвентаре при "gm 1" (true/false)
    drops: true    #Включить проверку выбрасываемых предметов (true/false)
    armor: true    #Включить проверку предметов, одеваемых с помощью ПКМ и Shift+ПКМ при включенном gm 1 (true/false)
    place: true    #Включить проверку установки блоков (строительства) при "gm 1" (true/false)
    permission: true    #Включить проверку разрешений(true/false)
    enchant:
      check: true    #Включить проверку зачарований (true/false)
      level: 11    #Максимальный уровень зачарований
      amount: 5    #Максимальное количество зачарований
      message: 'Это запрещенный предмет!'    #Сообщение при удалении запрещенного предмета
    
     
    Последнее редактирование: 1 июн 2022
  2. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    :confused:
     
  3. Автор темы
    Korvinius

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

    Баллы:
    88
    ага, есть такое, надеюсь мне это удастся исправить...
     
  4. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    Вряд-ли. В craftbukkit с инвентарем креатива все ужасно.
     
  5. Автор темы
    Korvinius

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

    Баллы:
    88
    как ни крути, а раньше, здесь и здесь мне вообще сказали, что такое сделать невозможно... Я считаю, что и так, для новичка имею кое какие успехи.
     
  6. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    А вы и не сделали. Против протокола моджангов к сожалению не попрёшь. Креатив это вообще одна головная боль.
    И да вам точно надо прочитать пару учебиков по жабе прежде чем писать плагины, сравнивать енумы через их имя это просто убойно. Да и проверяете вы странно. Каждый раз грузить конфиг при каждом клике это убойно для сервера уже.
    Специально для тех кто не хочет давать копировать важные вещи придумали отличное изобретение - раздельные инвентари.
     
    Последнее редактирование: 15 ноя 2014
  7. Автор темы
    Korvinius

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

    Баллы:
    88
    к сожалению, раздельные инвентари в моем случае не подходят, поэтому и пытаюсь как то решить это другими способами.
    И почему вы говорите, что каждый раз грузится конфиг? Я перепроверял, если вручную внести изменения в конфиг, они не отображаются на работе плагина до перезагрузки конфига, а значит он не грузится с диска при каждом, запросе а из памяти, конечно я думал копировать конфиг в переменную и сравнивать с переменной, даже интересовался как правильнее здесь. Как вы заметили я только учусь, спасибо за советы, буду учиться дальше). И да, джаву я тоже пытаюсь изучать. Но я думаю, самое лучшее обучение это практика, на теории далеко не уедешь, поэтому и взялся паралельно с изучением за практику.
     
  8. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Конфиг грузится в том смысле что вы дёргаете из YamlConfigration постоянно, вместо того чтобы создать хэшсет итемов которые запрещено использовать.
     
  9. Автор темы
    Korvinius

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

    Баллы:
    88
    Пробовал реализовать с помощью HashSet и ArrayList, местами работает, но при перемещении предметов (которые в конфиге) из сундука в инвентарь, игрока выкидывает из сервера, с ошибкой:
    Код:
    [01:38:47 WARN]: Failed to handle packet for /178.95.169.179:63933
    java.lang.IndexOutOfBoundsException: Index: 85, Size: 45
            at java.util.ArrayList.rangeCheck(ArrayList.java:635) ~[?:1.7.0_45]
            at java.util.ArrayList.get(ArrayList.java:411) ~[?:1.7.0_45]
            at net.minecraft.server.v1_7_R4.Container.clickItem(Container.java:264) ~[testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
            at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:1482) ~[testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
            at net.minecraft.server.v1_7_R4.PacketPlayInWindowClick.a(PacketPlayInWindowClick.java:15) ~[testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
            at net.minecraft.server.v1_7_R4.PacketPlayInWindowClick.handle(PacketPlayInWindowClick.java:65) ~[testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
            at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:186) ~[testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
            at net.minecraft.server.v1_7_R4.ServerConnection.c(ServerConnection.java:81) [testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
            at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:734) [testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
            at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:289) [testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
            at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:584) [testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
            at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:490) [testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
            at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [testmiddle.jar:git-Spigot-1.7.9-R0.2-205-g2c31986]
    

    а делал я это так:
    Код:
        // Чтение основных позиций конфига
            protected void loadConfig() {   
                this.getConfig().options().copyDefaults(true).copyHeader(true);
                this.saveDefaultConfig();
    
                debug = this.getConfig().getBoolean("debug");
                creative = this.getConfig().getBoolean("creative");
                anvilItem = this.getConfig().getBoolean("anvilItem");
                frameClik = this.getConfig().getBoolean("frameClick");
                dropItems = this.getConfig().getBoolean("dropItems");
                armorRigtClick = this.getConfig().getBoolean("armorRigtClick");
           
                loadItems();
                loadAnvil();
                loadArmor();
                loadDrops();
            }
       
        //Загрузка конфига креатива в масив itemsArrayList
            protected void loadItems() {
                String configItem;
                String configItemType = null;
                String configDisplayName = null;
                String configLore = null;
                itemsArrayList.clear();
           
                if (this.getConfig().getConfigurationSection("items") != null) {
               
                    for (String key : this.getConfig().getConfigurationSection("items").getKeys(false)) {
                        configItemType = this.getConfig().getString("items." + key + ".itemType");
                        configDisplayName = this.getConfig().getString("items." + key + ".itemDisplayName");
                        configLore = this.getConfig().getString("items." + key + ".itemLore");
                        configItem = configItemType + " Name: " + configDisplayName + " Lore: " + configLore;
       
                        itemsArrayList.add(configItem);               
                    }
                }
            }
    //***********************************************************
        @SuppressWarnings("deprecation")
    
        @EventHandler (priority = EventPriority.HIGHEST)
        public void onCheckAnvilCreative(InventoryClickEvent event) {
            Player player = (Player) event.getWhoClicked();
            String itemType;
            String itemDisplayName = null;
            String itemLore = null;
            // Проверка предметов, которые пытаются перемещать в инвентарях в креативе               
            if (plg.creative) {
                if (player.getGameMode() == GameMode.CREATIVE) {
                    if (event.getCursor().getType() != Material.AIR) {
                        itemType = event.getCursor().getType().toString();
                        if (event.getCursor().hasItemMeta()) {
                            if (event.getCursor().getItemMeta().hasDisplayName()) {
                                itemDisplayName = event.getCursor().getItemMeta().getDisplayName().toString();
                            } else itemDisplayName = "null";
                            if (event.getCursor().getItemMeta().hasLore()) {
                                itemLore = event.getCursor().getItemMeta().getLore().toString();
                            } else itemLore = "null";
                        }
                        plg.clickItem = itemType + " Name: " + itemDisplayName + " Lore: " + itemLore;
                   
                        if (plg.debug) {
                            plg.getLogger().info("[" + event.getWhoClicked().getName() + "] : " + " Перемещение в креативе преддмета: " + plg.clickItem);
                            }
                       
                        plg.readItems();
    
                            if (plg.clearr) {
    
                                event.setCursor(null);
                               player.sendMessage("Этот предмет нельзя перемещать в инвентаре при включенном творческом режиме игры");
                               player.updateInventory();
                               player.closeInventory();                       
                                if (plg.debug) {
                                    plg.getLogger().info(" Игрок [" + event.getWhoClicked().getName() + "] клик в режиме: "+ event.getWhoClicked().getGameMode() + " =--> " + event.getClick());
                                    }
                                player.setGameMode(GameMode.SURVIVAL);
                                plg.clearr = false;
                                itemType = null;
                                itemDisplayName = null;
                                itemLore = null;                   
                            }           
                    }       
                }   
            }
        }
        // Проверка конфига для креатива на совпадения   
            protected void readItems() {
                if (itemsArrayList.contains(clickItem)) {
                    clearr = true;              
                  if (debug) {
                      getLogger().info("Конфиг для креатива прочитан, обнаружены совпаденя!");
                    }
                } else {
                    clearr = false;
                    if (debug) {
                        getLogger().info("Конфиг для креатива прочитан, совпадений не найдено.");              
                    }
                }          
            }
    
    

    Не намекнете, хоть немножко, где это можно исправить?

    По идее это же можно исправить? Ведь при прежнем методе этой ошибки не было.
     
    Последнее редактирование: 26 ноя 2014
  10. vadikfra

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

    Баллы:
    68
    Имя в Minecraft:
    MiineRocK
  11. Автор темы
    Korvinius

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

    Баллы:
    88
    А, да, сори, были глобальные изменения на сайте, поправил.

    • изменена структура плагина
    • изменен принцип обработки данных
    • исправлена ошибка дающая шанс переименовать предмет в наковальне
    • исправлены ошибки дающае возможность копировать премет в творческом режиме
    • исправлены все известные ошибки плагина
    • релиз CheckItem v1.0.

    Была обнаружена очередная возможность "затолкать" запрещенный предмет в наковальню.
    CheckItem v1.1 - Больше этой возможности нет!
    Была обнаружена возможность переместить запрещенный предмет в креатив инвентаре, если ложить его в не пустую клетку.
    CheckItem v1.1.1 - Больше этой возможности нет!
     
    Последнее редактирование: 22 янв 2015
  12. Antro

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

    Баллы:
    66
    На 1.5.2 не будет работать? Просто не нашел плагина с функцией блока клонирования вещей в креативе
     
  13. Автор темы
    Korvinius

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

    Баллы:
    88
    Понятия не имею)) попробуйте, будем знать.
    Потому, что его нет, этот единственный.
     
    Последнее редактирование: 17 апр 2015
  14. Wndash

    Wndash Старожил Пользователь

    Баллы:
    173
    Интересно, хм
     
  15. Автор темы
    Korvinius

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

    Баллы:
    88
    что именно интересно?
    Кстати, я тут подумал, есть еще возможность клонировать блоки в креативе, путем их установки (строительства). Нужно будет и эту возможность заблокировать, как время свободное появится.
     
  16. Wndash

    Wndash Старожил Пользователь

    Баллы:
    173
    Плаг интересный
     
  17. Flagman

    Flagman Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Flagman
    Плагин действительно интересный.) Спасибо Корвину за него :)
     
  18. Artem99z

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

    Баллы:
    88
    Skype:
    Artemuidak
    Имя в Minecraft:
    ReDcTiOn
    Можешь добавить такие права:
    - checkitem.bypass.items
    - checkitem.bypass.drops и т.п.

    На игрока с этим правом, не будет действовать запрет.
     
  19. Автор темы
    Korvinius

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

    Баллы:
    88
    постараюсь не забыть ;)
    Собственно, решил не откладывать в долгий ящик:

    • CheckItem v1.1.3 добавлены права (Permissions) и сделаны некоторые правки.
     
  20. Artem99z

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

    Баллы:
    88
    Skype:
    Artemuidak
    Имя в Minecraft:
    ReDcTiOn
    Спасибо огромное x)
     

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