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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Kurumi, 18 сен 2019.

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

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

    Баллы:
    76
    неа, не ставится энивей
     
  2. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Не ставится прям? Странно, это должно было помочь пробуй еще PlaceBlockEvent. И убедись в правильности приоритетов.
     
  3. Автор темы
    Kurumi

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

    Баллы:
    76
    upload_2019-9-19_0-11-52.png и не ставится
     
  4. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Должна работать с UseBlockEvent, ты нужны приоритет указал?
     
  5. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Код:
       @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);
            }
       }
     
  6. Автор темы
    Kurumi

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

    Баллы:
    76
    Ошибка была на моей стороне. Исправил.
    Ну и теперь, скорее всего, последний вопрос..
    Я записываю количество установленных блоков в регионе в файлик.. Когда я ставлю tnt, число прибавляется, все верно, но когда я его ломаю, как я понял, срабатывает use block event и число снова прибавляется, хотя мне нужно прибавлять его только тогда, когда tnt устанавливается
     
  7. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Почитай, цитирую
     
  8. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Прибавляй на PlaceBlockEvent, а не на UseBlockEvent
     
  9. Автор темы
    Kurumi

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

    Баллы:
    76
    Спасибо!

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

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Посмотри утром, на свежую голову, где ты обосрался или делай сейчас дебаг out print при добавлении.
    Еще можешь залить на гит и я посмотрю что ты там понаписывал.
     
  11. Автор темы
    Kurumi

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

    Баллы:
    76
    Все же, не буду более тебя задерживать. Спасибо)
     
  12. Автор темы
    Kurumi

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

    Баллы:
    76
    Помучился помучился, так ничего и не вышло.
    Почему-то, при установке 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.pluginplayer);
            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<
    BlockblockList 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(regionsgetBlockFromBlocks(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(regionthis.cfg.getInt(region)+1);
                
    save();
            } else {
                
    this.cfg.set(region1);
                
    save();
            }
        }
    Помогите плес, не понимаю почему так происходит =(
     
  13. Автор темы
    Kurumi

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

    Баллы:
    76
    Вывожу строчку перед проверкой материала, она выводится один раз.
    Вывожу строку внутри условия, она вывадится дважды. Не понимаю, в чем проблема?
    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;
                }
            }
     
  14. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Код на гит
     
  15. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Потому что при интеракте отрабатывают обе руки.
     
  16. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Это не тот интеракт, это ивент WorldGuard
     
  17. Автор темы
    Kurumi

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

    Баллы:
    76
    в лс скинул
     
  18. Автор темы
    Kurumi

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

    Баллы:
    76
    С проблемой разобрался, всем спасибо!
    P.S. для тех, кто тоже с этим столкнулся, place block event из wg вызывает несколько ивентов. Из-за этого у меня срабатывало условеие дважды
     
Статус темы:
Закрыта.

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