Вопрос BentoBox - Изменение значения острова

testing0402

Пользователь
Сообщения
90
Решения
4
Здравствуйте!

В плагине deluxemenus у меня доступна функция улучшения острова. Имеется в виду увеличение его размеров: стандартный размер составляет 20x20, однако за определённое количество монет можно увеличить размер острова на 5x5, архитектура:
YAML:
'border1':
    material: dirt
    slot: 12
    priority: 5
    display_name: '&#AAFFBAРазмер острова &7(&a1&8/&75&7 lvl)'
    lore:
      - '&#AAFFBA&l‖ &#DDFFE3Ваш Размер: %aoneblock_island_protection_range%&7x&#DDFFE3%aoneblock_island_protection_range%&8 | &7(Прокачено 5x5)'
      - ''
      - '&7Следующее улучшение увеличит'
      - '&7остров на 5x5 блоков.'
      - ''
      - '&f Стоимость:&#F1FE8C Ⓒ 42000'
    left_click_requirement:
      requirements:
        has_money:
          type: has money
          amount: 42000
    view_requirement:
      requirements:
        shop_perm:
          type: has permission
          permission: island.upgrade.1
      deny_commands:
      - '[close]'
      - "[message]"
      - "[message]&#6CFF88&l ᴏ&#67FF82&lɴ&#62FF7B&lᴇ&#5DFF75&lʙ&#57FF6F&lʟ&#52FF69&lᴏ&#4DFF62&lᴄ&#48FF5C&lᴋ &7(Прокачка острова)"
      - "[message]&c У вас недостаточно монет."
      - "[message]"
    left_click_commands:
      - "[message]"
      - "[message]&#6CFF88&l ᴏ&#67FF82&lɴ&#62FF7B&lᴇ&#5DFF75&lʙ&#57FF6F&lʟ&#52FF69&lᴏ&#4DFF62&lᴄ&#48FF5C&lᴋ &7(Прокачка острова)"
      - "[message]&f Вы прокачали &#DDFFE3&nРазмер острова&f на &a2 lvl"
      - "[message]"
      - "[console] economy take %player_name% 42000"
      - "[console] lp user %player_name% permission set island.upgrade.2 true"
      - "[console] obadmin range add %player_name% 5"
      - "[sound] ENTITY_PLAYER_LEVELUP 1 1"
      - "[refresh]"

где главное это
YAML:
- "[console] obadmin range add %player_name% 5"
Вам необходимо зарегистрироваться для просмотра изображений-вложений

но после перезахода на сервер пишет:
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Решение
Написал в Discord bentobox, ответили:
В BentoBox приоритет отдается разрешениям, а не добавлению/удалению диапазона.

Поэтому рекомендуется использовать либо разрешения, либо команды. Не то и другое одновременно.
Разрешение - это строгое правило: размер острова ДОЛЖЕН БЫТЬ <число>!
В вашей ситуации вы могли бы:

сделайте так, чтобы каждый ранг имел разный размер острова, с вашего разрешения

или:

сделайте так, чтобы размер острова по умолчанию в конфигурации был равен 20x20
используйте только range add для увеличения размера острова
Вам необходимо зарегистрироваться для просмотра изображений-вложений


Я оставляю вопрос решённым на своём сообщении, так как получил ответ и решил поделиться им, поскольку у других могут возникнуть аналогичные проблемы.
Основная проблема заключается в том, что bentobox перезаписывает значение, которое стандартно предоставлено пермишеном "aoneblock.range.20" в luckperms для игрока. При этом команда (/obadmin range add %player_name%) увеличивает этот радиус, что позволяет частично реализовать мою задумку, но не в полном объеме :(
 
Java:
    private void updateIslandRange(User user) {
        plugin.getIslands().getIslands(user.getUniqueId()).stream()
                .filter(island -> island.getOwner() != null && island.getOwner().equals(user.getUniqueId()))
                .forEach(island -> {
                    // Check if new owner has a different range permission than the island size
                    int range = user.getPermissionValue(plugin.getIWM().getAddon(island.getWorld())
                            .map(GameModeAddon::getPermissionPrefix).orElse("") + "island.range",
                            island.getRawProtectionRange());
                    // Range cannot be greater than the island distance
                    range = Math.min(range, plugin.getIWM().getIslandDistance(island.getWorld()));
                    // Range can go up or down
                    if (range != island.getRawProtectionRange()) {
                        user.sendMessage("commands.admin.setrange.range-updated", TextVariables.NUMBER,
                                String.valueOf(range));
                        int oldRange = island.getProtectionRange();
                        island.setProtectionRange(range);

                        plugin.log("Island protection range changed from " + oldRange + " to "
                                + island.getProtectionRange() + " for " + user.getName() + " due to permission.");
                        // Call Protection Range Change event. Does not support canceling.
                        IslandEvent.builder().island(island).location(island.getProtectionCenter())
                                .reason(IslandEvent.Reason.RANGE_CHANGE).involvedPlayer(user.getUniqueId()).admin(true)
                                .protectionRange(island.getProtectionRange(), oldRange).build();
                    }
                });
    }

updateIslandRange() берёт значение из пермишена выданной группе default в luckperms и перезаписывает вручную установленное значение. Я не сильно разбираюсь в структуре Java, у кого-то будет возможность перезаписать событие сделав его аддоном? буду благодарен и подкину копеечку
 
Последнее редактирование:
Написал в Discord bentobox, ответили:
В BentoBox приоритет отдается разрешениям, а не добавлению/удалению диапазона.

Поэтому рекомендуется использовать либо разрешения, либо команды. Не то и другое одновременно.
Разрешение - это строгое правило: размер острова ДОЛЖЕН БЫТЬ <число>!
В вашей ситуации вы могли бы:

сделайте так, чтобы каждый ранг имел разный размер острова, с вашего разрешения

или:

сделайте так, чтобы размер острова по умолчанию в конфигурации был равен 20x20
используйте только range add для увеличения размера острова
Вам необходимо зарегистрироваться для просмотра изображений-вложений


Я оставляю вопрос решённым на своём сообщении, так как получил ответ и решил поделиться им, поскольку у других могут возникнуть аналогичные проблемы.
 
Назад
Сверху Снизу