Помогите WorldGuard API & WorldEdit API

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

MrHaber

Активный участник
Пользователь
Баллы
66
Здравствуйте, у меня появился вопрос который затрагивает использование WorldGuard API & WorldEdit API. Уже неделю мучаюсь, выдает ошибку хотя делал все правильно.
- Как получить имя региона в зависимости от того блока на который игрок кликнул (алмазом) с исключением глобального региона?
Код:
import com.sk89q.worldedit.Vector;
import com.sk89q.worldguard.bukkit.BukkitUtil;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import static com.sk89q.worldguard.bukkit.BukkitUtil.*;

    private WorldGuardPlugin getWorldGuard() {
        final Plugin plugin = this.getServer().getPluginManager().getPlugin("WorldGuard");
        if (plugin == null || !(plugin instanceof WorldGuardPlugin)) {
            return null;
        }
        return (WorldGuardPlugin)plugin;
    }
       this.wg = getWorldGuard();
    public void onClick(final PlayerInteractEvent event) {
           Action a = event.getAction();
      
       final Player p = event.getPlayer();
        final Block block = event.getClickedBlock();
        final World world = block.getWorld();
        Vector pt = (Vector)BukkitUtil.toVector(block); // This also takes a location
        RegionManager regionManager = Main.wg.getRegionManager(Bukkit.getWorld("world"));
        ApplicableRegionSet set = regionManager.getApplicableRegions(pt);
Данные с которыми я работаю.
Пожалуйста помогите решить проблему.
 
Если выдает ошибку, значит не все правильно.
А в чем проблема? Какая ошибка?
 
Если выдает ошибку, значит не все правильно.
А в чем проблема? Какая ошибка?
Код:
       if (a != Action.RIGHT_CLICK_BLOCK) return;
       if (p.getItemInHand().getType() == Material.DIAMOND) {{
                if (set.size() < 1) {
                    p.sendMessage("Rgs not found");
                    return;
                }
                if (((ProtectedRegion) set).getOwners().contains(p.getName()) || ((ProtectedRegion) set).getMembers().contains(p.getName())) {
                    p.sendMessage("You Have been in this region");
                    return;
                }
                p.sendMessage("Added");
                ((ProtectedRegion) set).getMembers().addPlayer(p.getName());
                }
Уже все перепробовал, на это жалуется.
 
Можете помочь мне составить подобный алгоритм с использование WG & WE API?
 
Уже все перепробовал, на это жалуется.
Если у тебя ошибка, ты должен выкладывать сюда лог, а не писать "на что то жалуется". Последний случай не дает нам никакой полезной информации и мы соответственно не можем помочь.

В коде ты очевидно приводишь ApplicableRegionSet до ProtectedRegion (коллекцию регионов до региона), что в принципе невозможно. Ты должен итерировать каждый регион из этой коллекции:
Код:
for (ProtectedRegion region : set) {
 // ...
}
 
Если у тебя ошибка, ты должен выкладывать сюда лог, а не писать "на что то жалуется". Последний случай не дает нам никакой полезной информации и мы соответственно не можем помочь.

В коде ты очевидно приводишь ApplicableRegionSet до ProtectedRegion (коллекцию регионов до региона), что в принципе невозможно. Ты должен итерировать каждый регион из этой коллекции:
Код:
for (ProtectedRegion region : set) {
 // ...
}
Спасибо, вроде механику проработал -
Код:
    public void onClick(final PlayerInteractEvent event) {
           Action a = event.getAction();
       
       final Player p = event.getPlayer();
        final Block block = event.getClickedBlock();
        final World world = block.getWorld();
       
        Vector pt = (Vector)BukkitUtil.toVector(block); // This also takes a location
        RegionManager regionManager = Main.wg.getRegionManager(Bukkit.getWorld("world"));
        ApplicableRegionSet set = regionManager.getApplicableRegions(pt);
       final ItemStack i = p.getItemInHand();
       final ItemMeta m = i.getItemMeta();
       
       
       
       for (ProtectedRegion set1 : set){
       if (a != Action.RIGHT_CLICK_BLOCK) return;
       if (p.getItemInHand().getType() == Material.DIAMOND) {
                if (set.size() < 1) {
                    p.sendMessage("Rgs not found");
                    return;
                }
                if (set1.getOwners().contains(p.getName()) || set1.getMembers().contains(p.getName())) {
                    p.sendMessage("You Have been in this region");
                    return;
                }
                p.sendMessage("Added");
                set1.getMembers().addPlayer(p.getName());
                }
       }
            }
   
}
Выходит ошибка когда пытаюсь глобальный регион проверить и кликнуть в воздухе -
Код:
[Server thread/ERROR]: Could not pass event PlayerInteractEvent to Plugin v2.0
org.bukkit.event.EventException
   at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:228) [spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:195) [spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:191) [spigot.jar:git-Spigot-db6de12-18fbb24]
   at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:717) [spigot.jar:git-Spigot-db6de12-18fbb24]
Так при любом клике по воздуху. Не получается получить глобальный регион.
 
Выходит ошибка когда пытаюсь глобальный регион проверить и кликнуть в воздухе -
Код:
[Server thread/ERROR]: Could not pass event PlayerInteractEvent to Plugin v2.0
org.bukkit.event.EventException
   at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:228) [spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:195) [spigot.jar:git-Spigot-db6de12-18fbb24]
   at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:191) [spigot.jar:git-Spigot-db6de12-18fbb24]
   at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:717) [spigot.jar:git-Spigot-db6de12-18fbb24]
Так при любом клике по воздуху. Не получается получить глобальный регион.
Стак трейс ошибки не полный, ниже должен быть Caused by... и т.д.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх