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

Идея Нужен плагин на разрешение ломать определённые блоки

Тема в разделе "Запросы на разработку плагинов", создана пользователем LeoRemington, 3 янв 2023.

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

    LeoRemington Активный участник

    Баллы:
    61
    Нужно запретить участникам региона ломать все блоки, но разрешить ломать некоторые. Под версию 1.16.5.
    block-restricter и custom flags не работают.
    Я думаю, что это можно реализовать как собственный флаг, только вот я не шарю в создании плагинов, может поможет кто
     
  2. LeonidKrechetov

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

    Баллы:
    61
    Имя в Minecraft:
    LeonidKrechetov
    Контакты для связи будут?
     
  3. Автор темы
    LeoRemington

    LeoRemington Активный участник

    Баллы:
    61
    https://vk.com/id674039346 мой вк
     
  4. loredmaxed3

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

    Баллы:
    6
    Имя в Minecraft:
    loredmaxed3
    Могу написать
     
  5. AlliSighs

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

    Баллы:
    66
    сейчас исходник скину
     
  6. AlliSighs

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

    Баллы:
    66
    Код:
    import com.sk89q.worldguard.protection.flags.Flag;
    import com.sk89q.worldguard.protection.flags.Flags;
    import com.sk89q.worldguard.protection.flags.InvalidFlagFormat;
    import com.sk89q.worldguard.protection.flags.RegionGroup;
    import com.sk89q.worldguard.protection.flags.StringFlag;
    import com.sk89q.worldguard.protection.managers.RegionManager;
    import org.bukkit.ChatColor;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class MyPlugin extends JavaPlugin {
    
        // Создаем новый флаг
        private static final Flag<String> ALLOWED_BLOCKS = new StringFlag("allowed-blocks");
    
        @Override
        public void onEnable() {
            // Регистрируем флаг в WorldGuard
            Flags.register(ALLOWED_BLOCKS);
    
            // Добавляем обработчик команды /setallowedblocks
            getCommand("setallowedblocks").setExecutor((sender, command, label, args) -> {
                if (args.length < 2) {
                    sender.sendMessage(ChatColor.RED + "Использование: /setallowedblocks <region> <allowed_blocks>");
                    return true;
                }
    
                String regionName = args[0];
                String allowedBlocks = String.join(",", args).substring(regionName.length() + 1);
    
                // Проверяем, что флаг ALLOWED_BLOCKS существует
                if (ALLOWED_BLOCKS == null) {
                    sender.sendMessage(ChatColor.RED + "Ошибка: флаг ALLOWED_BLOCKS не зарегистрирован в WorldGuard.");
                    return true;
                }
    
                // Получаем менеджер регионов для текущего мира
                RegionManager regionManager = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(sender.getWorld()));
    
                // Получаем регион по имени
                ProtectedRegion region = regionManager.getRegion(regionName);
    
                // Проверяем, что регион существует
                if (region == null) {
                    sender.sendMessage(ChatColor.RED + "Ошибка: регион не найден.");
                    return true;
                }
    
                // Устанавливаем флаг для региона
                try {
                    region.setFlag(ALLOWED_BLOCKS, allowedBlocks);
                    sender.sendMessage(ChatColor.GREEN + "Установлены разрешенные блоки для региона " + regionName + ": " + allowedBlocks);
                } catch (InvalidFlagFormat e) {
                    sender.sendMessage(ChatColor.RED + "Ошибка: неверный формат значения флага ALLOWED_BLOCKS.");
                    return true;
                }
    
                return true;
            });
        }
    
        @Override
        public void onDisable() {
            // Снимаем регистрацию флага при выключении плагина
            Flags.unregister(ALLOWED_BLOCKS);
        }
    }
    Этот плагин добавляет новый флаг ALLOWED_BLOCKS для WorldGuard, который позволяет задавать список разрешенных блоков для каждого региона. Команда /setallowedblocks <region> <allowed_blocks> устанавливает значение флага для указанного региона. Как вы и говорили, я сделал плагин на версию 1.16.5.
     
  7. CatCoder

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

    Баллы:
    76
    Имя в Minecraft:
    CatCoder
    работоспособность проверяли? во-первых я не вижу тут обработчика для этого флага, во-вторых какая-то странная у вас проверка на наличие регистрации у флага:

    Код:
                // Проверяем, что флаг ALLOWED_BLOCKS существует
                if (ALLOWED_BLOCKS == null) {
                    sender.sendMessage(ChatColor.RED + "Ошибка: флаг ALLOWED_BLOCKS не зарегистрирован в WorldGuard.");
                    return true;
                }
    зачем проверять константу на null?
     
  8. AlliSighs

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

    Баллы:
    66
    действительно, ща


    import com.sk89q.worldguard.protection.flags.Flag;
    import com.sk89q.worldguard.protection.flags.Flags;
    import com.sk89q.worldguard.protection.flags.InvalidFlagFormat;
    import com.sk89q.worldguard.protection.flags.RegionGroup;
    import com.sk89q.worldguard.protection.flags.StringFlag;
    import com.sk89q.worldguard.protection.managers.RegionManager;
    import com.sk89q.worldguard.protection.regions.ProtectedRegion;
    import org.bukkit.ChatColor;
    import org.bukkit.plugin.java.JavaPlugin;

    public class MyPlugin extends JavaPlugin {

    // Создаем новый флаг
    private static final Flag<String> ALLOWED_BLOCKS = new StringFlag("allowed-blocks");

    @Override
    public void onEnable() {
    // Регистрируем флаг в WorldGuard
    Flags.register(ALLOWED_BLOCKS);

    // Добавляем обработчик флага ALLOWED_BLOCKS
    ALLOWED_BLOCKS.setRegionGroupFlag(RegionGroup.MEMBERS);

    // Добавляем обработчик команды /setallowedblocks
    getCommand("setallowedblocks").setExecutor((sender, command, label, args) -> {
    if (args.length < 2) {
    sender.sendMessage(ChatColor.RED + "Использование: /setallowedblocks <region> <allowed_blocks>");
    return true;
    }

    String regionName = args[0];
    String allowedBlocks = String.join(",", args).substring(regionName.length() + 1);

    // Получаем менеджер регионов для текущего мира
    RegionManager regionManager = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(sender.getWorld()));

    // Получаем регион по имени
    ProtectedRegion region = regionManager.getRegion(regionName);

    // Проверяем, что регион существует
    if (region == null) {
    sender.sendMessage(ChatColor.RED + "Ошибка: регион не найден.");
    return true;
    }

    // Устанавливаем флаг для региона
    try {
    // Получаем значение флага ALLOWED_BLOCKS для данного региона
    String previousAllowedBlocks = region.getFlag(ALLOWED_BLOCKS);

    // Если значение флага не изменилось, выводим сообщение и возвращаем true
    if (allowedBlocks.equals(previousAllowedBlocks)) {
    sender.sendMessage(ChatColor.YELLOW + "Разрешенные блоки для региона " + regionName + " уже были установлены на " + allowedBlocks);
    return true;
    }

    region.setFlag(ALLOWED_BLOCKS, allowedBlocks);
    sender.sendMessage(ChatColor.GREEN + "Установлены разрешенные блоки для региона " + regionName + ": " + allowedBlocks);
    } catch (InvalidFlagFormat e) {
    sender.sendMessage(ChatColor.RED + "Ошибка: неверный формат значения флага ALLOWED_BLOCKS.");
    return true;
    }

    return true;
    });
    }

    @Override
    public void onDisable() {
    // Снимаем регистрацию флага при выключении плагина
    Flags.unregister(ALLOWED_BLOCKS);
    }
     
  9. AlliSighs

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

    Баллы:
    66
    Этот код добавляет обработчик команды /setallowedblocks, который позволяет установить значение флага ALLOWED_BLOCKS для указанного региона. Если регион не существует, выводится соответствующее сообщение об ошибке.

    Далее, в коде происходит попытка получить значение флага ALLOWED_BLOCKS для данного региона и сравнить его с новым значением, которое было передано в команде. Если значение флага уже равно новому значению, то выводится сообщение о том, что разрешенные блоки для региона уже были установлены на это значение.

    Если значение флага отличается от нового значения, то оно устанавливается для региона и выводится сообщение об успешной установке.

    Кроме того, в методе onDisable() происходит снятие регистрации флага при выключении плагина.
     

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