Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

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. Плагин может видеть мод ?
 
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. Плагин может видеть мод ?

Хм, сделай возможность стрелять, только тогда когда игрок на n Блоков от резиденции и смотрит в другую сторону.
2. Я думаю что лучше для этих целей будет мод на сервер
 
Не сочтите за флуд, но вроде фикс на лазеры существует уже сотню лет.
А по коду могу помочь:
Есть такая вещь, как 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);
}
}
}

Это, правда, не поможет в некоторых режимах лазера, но тут я уже не помогу.
Из теорий:
Я так понимаю, снаряд лазера является Entity, поэтому можно деспавнить его, если он находится на "опасной близости" он приваченного блока.
 
Не сочтите за флуд, но вроде фикс на лазеры существует уже сотню лет.
А по коду могу помочь:
Есть такая вещь, как 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);
}
}
}

Это, правда, не поможет в некоторых режимах лазера, но тут я уже не помогу.

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

Я про getTargetBlock знаю, я хотел спросить как можно проверить что блок в регионе ?
 
Разве есть фикс ._.? Последний раз видел у IC2 на 1.4.6.

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

тут уже не помогу, я в плагинах нуб
 

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

Назад
Верх