Помогите Разрешить игроку ставить блок в чужом привате

  • Автор темы Автор темы Kurumi
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Kurumi

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Kurumi
Добрый день.
Как можно разрешить игроку с пермишеном ставить какой-то блок в чужом привате?
 
Код:
   @EventHandler(priority = EventPriority.LOWEST)
   public void on(UseBlockEvent event) {
    
        List<Block> blocks = event.getBlocks();
        if(blocks == null || blocks.isEmpty()) return;
        for(Block block : event.getBlocks()) {
           if(условие)
               event.setResult(Result.ALLOW);
        }
   }
 
Код:
   @EventHandler(priority = EventPriority.LOWEST)
   public void on(UseBlockEvent event) {
   
        List<Block> blocks = event.getBlocks();
        if(blocks == null || blocks.isEmpty()) return;
        for(Block block : event.getBlocks()) {
           if(условие)
               event.setResult(Result.ALLOW);
        }
   }
Ошибка была на моей стороне. Исправил.
Ну и теперь, скорее всего, последний вопрос..
Я записываю количество установленных блоков в регионе в файлик.. Когда я ставлю tnt, число прибавляется, все верно, но когда я его ломаю, как я понял, срабатывает use block event и число снова прибавляется, хотя мне нужно прибавлять его только тогда, когда tnt устанавливается
 
Ошибка была на моей стороне. Исправил.
Ну и теперь, скорее всего, последний вопрос..
Я записываю количество установленных блоков в регионе в файлик.. Когда я ставлю tnt, число прибавляется, все верно, но когда я его ломаю, как я понял, срабатывает use block event и число снова прибавляется, хотя мне нужно прибавлять его только тогда, когда tnt устанавливается
Прибавляй на PlaceBlockEvent, а не на UseBlockEvent
 
Прибавляй на PlaceBlockEvent, а не на UseBlockEvent
Спасибо!

Но почему ивент срабатывает 2 раза? Хотя скорее всего, мне кажется, что я опять накосячил.
Когда я ставлю блок, количество прибавляется 2 раза. То есть за один поставленный блок +2.
Везде понавтыкал уже return и break, не помогает...
 
Спасибо!

Но почему ивент срабатывает 2 раза? Хотя скорее всего, мне кажется, что я опять накосячил.
Когда я ставлю блок, количество прибавляется 2 раза. То есть за один поставленный блок +2.
Везде понавтыкал уже return и break, не помогает...
Посмотри утром, на свежую голову, где ты обосрался или делай сейчас дебаг out print при добавлении.
Еще можешь залить на гит и я посмотрю что ты там понаписывал.
 
Посмотри утром, на свежую голову, где ты обосрался или делай сейчас дебаг out print при добавлении.
Еще можешь залить на гит и я посмотрю что ты там понаписывал.
Все же, не буду более тебя задерживать. Спасибо)
 
Помучился помучился, так ничего и не вышло.
Почему-то, при установке tnt моя переменная инкрементится 2 раза...

PHP:
 @EventHandler(priority = EventPriority.LOWEST)
    public void place(PlaceBlockEvent event) {
        Cause cause = event.getCause();
        Player player = cause.getFirstPlayer();
        if(player == null || player.isOp()) return;
        Group group = new Group(this.plugin, player);
        if(this.groups.contains(group.getName())) {
            Data data = new Data(player.getUniqueId().toString(), this.plugin);
            if (!Data.exist(player.getUniqueId().toString(), this.plugin)) {
                data.createData(player);
            }
            List<Block> blockList = event.getBlocks();
            if(blockList == null || blockList.isEmpty()) return;
            RegionContainer container = WorldGuardPlugin.inst().getRegionContainer();
            RegionManager regions = container.get(event.getWorld());
            if(regions == null) return;
            String regionId = getRegionIdByLocation(regions, getBlockFromBlocks(blockList).getLocation());
            if (regionId.equals("netu")) return;
            if(group.isBlockPlaceInRegion() && event.getEffectiveMaterial() != Material.TNT) {
                event.setResult(Event.Result.ALLOW);
                return;
            } else if (event.getEffectiveMaterial() == Material.TNT) {
                if (data.getCount(regionId) >= group.getTntPlaceLimit()) {
                    player.sendMessage(ChatColor.RED + "Ваш лимит на установку TNT закончился!");
                    return;
                }
                event.setResult(Event.Result.ALLOW);
                data.addCount(regionId);
                return;
            }
        }
    }

PHP:
    public void addCount(String region) {
        if(this.cfg.get(region) != null) {
            this.cfg.set(region, this.cfg.getInt(region)+1);
            save();
        } else {
            this.cfg.set(region, 1);
            save();
        }
    }

Помогите плес, не понимаю почему так происходит =(
 
Вывожу строчку перед проверкой материала, она выводится один раз.
Вывожу строку внутри условия, она вывадится дважды. Не понимаю, в чем проблема?
PHP:
else if (event.getEffectiveMaterial() == Material.TNT) {
                if (data.getCount(regionId) >= group.getTntPlaceLimit()) {
                    player.sendMessage(ChatColor.RED + "Ваш лимит на установку TNT закончился!");
                    return;
                }
                event.setResult(Event.Result.ALLOW);
                data.addCount(regionId);
                debug("is tnt");
                return;
            }
        }
 
Вывожу строчку перед проверкой материала, она выводится один раз.
Вывожу строку внутри условия, она вывадится дважды. Не понимаю, в чем проблема?
PHP:
else if (event.getEffectiveMaterial() == Material.TNT) {
                if (data.getCount(regionId) >= group.getTntPlaceLimit()) {
                    player.sendMessage(ChatColor.RED + "Ваш лимит на установку TNT закончился!");
                    return;
                }
                event.setResult(Event.Result.ALLOW);
                data.addCount(regionId);
                debug("is tnt");
                return;
            }
        }
Код на гит
 
Вывожу строчку перед проверкой материала, она выводится один раз.
Вывожу строку внутри условия, она вывадится дважды. Не понимаю, в чем проблема?
PHP:
else if (event.getEffectiveMaterial() == Material.TNT) {
                if (data.getCount(regionId) >= group.getTntPlaceLimit()) {
                    player.sendMessage(ChatColor.RED + "Ваш лимит на установку TNT закончился!");
                    return;
                }
                event.setResult(Event.Result.ALLOW);
                data.addCount(regionId);
                debug("is tnt");
                return;
            }
        }
Потому что при интеракте отрабатывают обе руки.
 
С проблемой разобрался, всем спасибо!
P.S. для тех, кто тоже с этим столкнулся, place block event из wg вызывает несколько ивентов. Из-за этого у меня срабатывало условеие дважды
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх