Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Проверка блока в регионе [WG]

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

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

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    1.Делаю плагин для отключения разрушительности у лазера из IC2 в регионы , так вот. Делаю через PlayerInteractEvent(Хотел через extends, но он моды не принимает :( ). В регионе он "отключается", выводится сообщение "Testing...", но когда игрок выходит из региона он может сломать блоки которые находятся в резиденции. вот код:

    Код:
        @EventHandler
        public void onPlayerInteract(PlayerInteractEvent event) {
            Player player = event.getPlayer();
            if(!player.hasPermission("laser.shout")){
            if (event.getAction()==(Action.RIGHT_CLICK_BLOCK) || (event.getAction() == Action.RIGHT_CLICK_AIR)) {
                if (player.getItemInHand().getTypeId() == plugin.getConfig().getInt("id-laser")) {
                    Block targetBlock = player.getTargetBlock(null, 20);
                    WorldGuardPlugin WG = (WorldGuardPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldGuard");
                    Location loc = new Location(targetBlock.getWorld(),targetBlock.getLocation().getX(),targetBlock.getLocation().getY(), targetBlock.getLocation().getZ());
                    if (!WG.canBuild(player, loc)) {
                        player.sendMessage("Testing...");
                        event.setCancelled(true);
                    }
                }
            }
            }
        }    
    2. Плагин может видеть мод ?
     
  2. Хостинг MineCraft
    <
  3. Dan-det

    Dan-det Старожил Пользователь

    Баллы:
    103
    Хм, сделай возможность стрелять, только тогда когда игрок на n Блоков от резиденции и смотрит в другую сторону.
    2. Я думаю что лучше для этих целей будет мод на сервер
     
  4. enselerizer

    enselerizer Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    enselerizer
    Не сочтите за флуд, но вроде фикс на лазеры существует уже сотню лет.
    А по коду могу помочь:
    Есть такая вещь, как getTargetBlock(transparent, maxDistance). Она позволяет извлечь блок, на который смотрит игрок. Т.е. например, если игрок, стреляя из лазера, смотрит на блок в регионе, то ставим setCanselled.
    Например так:
    PHP:
    @EventHandler
    public void onLaserShot(PlayerInteractEvent e)
    {
    if(
    e.getPlayer().getItemInHand().getTypeId == <ID лазера>)
    {
    if(
    e.getPlayer().getTargetBlock() == <Блаблабладелаем чек принадлежности к региону>)
    {
    player.sendMessage("Testing...");
    event.setCancelled(true);
    }
    }
    }
    Это, правда, не поможет в некоторых режимах лазера, но тут я уже не помогу.[DOUBLEPOST=1376642251,1376641520][/DOUBLEPOST]Из теорий:
    Я так понимаю, снаряд лазера является Entity, поэтому можно деспавнить его, если он находится на "опасной близости" он приваченного блока.
     
  5. Автор темы
    BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    Разве есть фикс ._.? Последний раз видел у IC2 на 1.4.6.

    Я про getTargetBlock знаю, я хотел спросить как можно проверить что блок в регионе ?
     
  6. enselerizer

    enselerizer Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    enselerizer
    тут уже не помогу, я в плагинах нуб
     
  7. Dvladislav

    Dvladislav Старожил Переводчик Пользователь

    Баллы:
    173
    Есть ic2 с эвентами и этим все сказано.
     

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