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

Помогите Запрет экипировки брони

Тема в разделе "Разработка плагинов для новичков", создана пользователем NeitExx, 28 июл 2018.

Статус темы:
Закрыта.
  1. Автор темы
    NeitExx

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

    Баллы:
    61
    Имя в Minecraft:
    NeitExx
    Всем привет. Идея была такова: Если предмет имеет какой то определённый символ в описании, то не давать игроку одеть эту броню.
    Но нормально реализовать это не получилось.

    Если отменить ивент InventoryClickEvent, то предмет исчезнет. Пробовал после этого добавить этот предмет на курсор. На курсоре ничего не появлялось, а при закрытии инвентаря предмет выбрасывался. Если возвращать предмет через несколько миллисекунд, то предмет появляется на курсоре, но если положить предмет обратно в инвентарь и закрыть инвентарь, то предмет снова дропается из него.

    Вопрос:
    Как можно нормально реализовать "запрет экипировки"?
     
  2. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Ну во первых не один InventoryClickEvent нужно использовать. Еще есть таковой InventoryDragEvent, если ты зажмешь по слоту и проведешь, а потом отпустишь, первое событие не сработает. Потом клик ПКМ в руках вроде тоже надо добавлять и когда с раздатчика стреляет.
    Тут интересно. Вроде не должен исчезать. Какое ядро? Есть пример кода?
     
  3. Автор темы
    NeitExx

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

    Баллы:
    61
    Имя в Minecraft:
    NeitExx

    Что то типо такого:

    Player player = (Player) e.getWhoClicked();

    if(e.getClickedInventory().equals(player.getInventory())){

    if(e.getSlotType() == InventoryType.SlotType.ARMOR){
    ItemStack itemStack = e.getCursor();

    if (itemStack.getItemMeta() == null || itemStack.getItemMeta().getLore() == null || itemStack.getItemMeta().getDisplayName() == null) {
    return;
    }

    int itemlevel = 0;

    for (String lore : itemStack.getItemMeta().getLore()) {
    if(lore.contains(ChatColor.GRAY + "Уровень предмета: ")){
    itemlevel = getInteger(lore);
    }

    }
    if(user.getLevel()<itemlevel){
    e.setCancelled(true);
    player.setItemOnCursor(itemStack);
    return;
    }



    public static int getInteger(String lore){
    int integer = 0;
    String forInt;
    forInt = ChatColor.stripColor(lore);
    forInt = forInt.replaceAll("[^0-9]", "");
    integer = Integer.parseInt(forInt);
    return integer;
    }
     
  4. Автор темы
    NeitExx

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

    Баллы:
    61
    Имя в Minecraft:
    NeitExx
    Если запустить новый поток и в нём через, например, 20 миллисекунд вставить предмет на курсор, то он будет виден. Но предмет всё равно будет выбрасываться при закрытии инвентаря.
     
  5. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    1. Код вставлять нужно адекватно, чтобы он читался, с отступами и т.д., заливать его в оболочку CODE или же на какой то паст закидать (privatebin / hastebin ...)
    2. Инвентари лучше сравнивать через кастомный InventoryHolder (можно загуглить как)
    3. Не сетай никакие предметы, просто отменяй ивент. Какая версия ядра? Как миниум от 1.8+ должно все быть адекватно.
     
  6. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Понятно, что он будет сбрасываться, так как при закрытии инвентаря курсор всегда дропается.
     
  7. Автор темы
    NeitExx

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

    Баллы:
    61
    Имя в Minecraft:
    NeitExx
    Версия 1.12.2
     
  8. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Извиняюсь, не та ситуация, узнавай тип инвентаря через InventoryType.
    Может баг визуальный? Может предмет остается на месте, попробуй потыкать в слоты, где ты его брал и ставил. Ну он не может просто удаляться при отменении InventoryClickEvent это точно.
     
  9. Автор темы
    NeitExx

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

    Баллы:
    61
    Имя в Minecraft:
    NeitExx

    Видимо может
     
  10. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    В креативе постоянно такая фигня с инвентарями. Без креатива работает нормально.
     
  11. Автор темы
    NeitExx

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

    Баллы:
    61
    Имя в Minecraft:
    NeitExx
    Ааааа... Ясно.
    Огромное спасибо))
     
Статус темы:
Закрыта.

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