Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

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] - это категория конфига, существующие категории:
items - проверка предметов действие над которыми происходит в творческом режиме
anvil
- проверка предметов перемещаемых при открытом инвентаре наковальни
armor - проверка брони, одеваемой при включенном gm-1 с помощью ПКМ или Shift+ПКМ
drop - проверка выбрасываемых предметов (дроп)
place - проверка установки блоков в творческом режиме (строительство)



Основные пункты конфигурации (config.yml):
YAML:
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: 'Это запрещенный предмет!'    #Сообщение при удалении запрещенного предмета

История версий:
  • CheckItem v2.0.1
  1. Исправлены технические ошибки.
  • CheckItem v2.0
  1. добавлена проверка уровня зачарований.
  2. добавлена проверка количества зачарований.
  3. добавлено разрешение checkitem.bypass.enchant - игнор проверки зачарований.
  4. добавлена возможность включать/отключать проверку разрешений.
  5. добавлена проверка предметов помещаемых на армор-стенды и снимаемых с них.
  6. добавлены дополнительные позиции в конфиг.
  7. на 50% переписан код.
  8. исправлены ошибки в консоли.
  • CheckItem v1.2
добавлена проверка установки блоков в творческом режиме.
Исправлены мелкие ошибки.
В конфиг добавляем позицию: place: true
Дополнение к команде добавления предметов в конфиг: /checkitem add place - проверка установки блоков в творческом режиме.
А также добавился новый пермишен:
  • checkitem.bypass.blockplace - игнор ограничений установки блоков
  • CheckItem v1.1.3 добавлены права (Permissions) и сделаны некоторые правки.
  • CheckItem v1.1.1 исправлена обнаруженная ошибка.
  • релиз CheckItem v1.0.
  • исправлена обнаруженная ошибка.
  • исправлены все известные ошибки плагина
  • исправлены ошибки дающае возможность копировать премет в творческом режиме
  • исправлена ошибка дающая шанс переименовать предмет в наковальне
  • изменен принцип обработки данных
  • изменена структура плагина
  • v0.0.1 beta - выпуск тестовой версии плагина
 
Последнее редактирование:
как ни крути, а раньше, здесь и здесь мне вообще сказали, что такое сделать невозможно... Я считаю, что и так, для новичка имею кое какие успехи.
 
А вы и не сделали. Против протокола моджангов к сожалению не попрёшь. Креатив это вообще одна головная боль.
И да вам точно надо прочитать пару учебиков по жабе прежде чем писать плагины, сравнивать енумы через их имя это просто убойно. Да и проверяете вы странно. Каждый раз грузить конфиг при каждом клике это убойно для сервера уже.
Специально для тех кто не хочет давать копировать важные вещи придумали отличное изобретение - раздельные инвентари.
 
Последнее редактирование:
А вы и не сделали. Против протокола моджангов к сожалению не попрёшь. Креатив это вообще одна головная боль.
И да вам точно надо прочитать пару учебиков по жабе прежде чем писать плагины, сравнивать енумы через их имя это просто убойно. Да и проверяете вы странно. Каждый раз грузить конфиг при каждом клике это убойно для сервера уже.
Специально для тех кто не хочет давать копировать важные вещи придумали отличное изобретение - раздельные инвентари.
к сожалению, раздельные инвентари в моем случае не подходят, поэтому и пытаюсь как то решить это другими способами.
И почему вы говорите, что каждый раз грузится конфиг? Я перепроверял, если вручную внести изменения в конфиг, они не отображаются на работе плагина до перезагрузки конфига, а значит он не грузится с диска при каждом, запросе а из памяти, конечно я думал копировать конфиг в переменную и сравнивать с переменной, даже интересовался как правильнее здесь. Как вы заметили я только учусь, спасибо за советы, буду учиться дальше). И да, джаву я тоже пытаюсь изучать. Но я думаю, самое лучшее обучение это практика, на теории далеко не уедешь, поэтому и взялся паралельно с изучением за практику.
 
к сожалению, раздельные инвентари в моем случае не подходят, поэтому и пытаюсь как то решить это другими способами.
И почему вы говорите, что каждый раз грузится конфиг? Я перепроверял, если вручную внести изменения в конфиг, они не отображаются на работе плагина до перезагрузки конфига, а значит он не грузится с диска при каждом, запросе а из памяти, конечно я думал копировать конфиг в переменную и сравнивать с переменной, даже интересовался как правильнее здесь. Как вы заметили я только учусь, спасибо за советы, буду учиться дальше). И да, джаву я тоже пытаюсь изучать. Но я думаю, самое лучшее обучение это практика, на теории далеко не уедешь, поэтому и взялся паралельно с изучением за практику.
Конфиг грузится в том смысле что вы дёргаете из YamlConfigration постоянно, вместо того чтобы создать хэшсет итемов которые запрещено использовать.
 
Конфиг грузится в том смысле что вы дёргаете из YamlConfigration постоянно, вместо того чтобы создать хэшсет итемов которые запрещено использовать.
Пробовал реализовать с помощью 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]

а делал я это так:
Java:
    // Чтение основных позиций конфига
        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("Конфиг для креатива прочитан, совпадений не найдено.");              
                }
            }          
        }

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

По идее это же можно исправить? Ведь при прежнем методе этой ошибки не было.
 
Последнее редактирование:
Ссылка не робит! =(
А, да, сори, были глобальные изменения на сайте, поправил.

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

Была обнаружена очередная возможность "затолкать" запрещенный предмет в наковальню.
CheckItem v1.1 - Больше этой возможности нет!
Была обнаружена возможность переместить запрещенный предмет в креатив инвентаре, если ложить его в не пустую клетку.
CheckItem v1.1.1 - Больше этой возможности нет!
 
Последнее редактирование:
На 1.5.2 не будет работать? Просто не нашел плагина с функцией блока клонирования вещей в креативе
 
Последнее редактирование:
что именно интересно?
Кстати, я тут подумал, есть еще возможность клонировать блоки в креативе, путем их установки (строительства). Нужно будет и эту возможность заблокировать, как время свободное появится.
 
Плагин действительно интересный.) Спасибо Корвину за него :)
 
Можешь добавить такие права:
- checkitem.bypass.items
- checkitem.bypass.drops и т.п.

На игрока с этим правом, не будет действовать запрет.
 
Можешь добавить такие права:
- checkitem.bypass.items
- checkitem.bypass.drops и т.п.

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

  • CheckItem v1.1.3 добавлены права (Permissions) и сделаны некоторые правки.
Права (Permissions):
  • checkitem.bypass.items - игнор ограничений в креативе
  • checkitem.bypass.armor - игнор ограничений одевания брони
  • checkitem.bypass.anvil - игнор ограничений наковальни
  • checkitem.bypass.drops - игнор ограничений дропа
 
Назад
Верх