2015-03-08 3 views
0

Я хочу создать плагин, который заполняет местоположение на моей карте в определенное время. Но когда я пытаюсь использовать событие WorldEvent, он не работает; он говоритBukkit Java Coding, night checker

Unable to find handler list for event org.bukkit.event.world.WorldEvent 

Это то, что я до сих пор:

@EventHandler 
    public void onTimeNight(WorldEvent e) { 
     long time = e.getWorld().getTime(); 
     // -469 78 418 
     // -469 30 433 
     if (time == 13000) { 
      int x = -469; 
      for (int y = 30; y < 80; y++) { 
       for (int z = 402; z < 418; z++) { 
        Location location = new Location(e.getWorld(), x, y, z); 
        location.getBlock().setType(Material.BRICK); 

       } 
      } 
     } 

    } 
+0

Почему вы используете всемирное событие? Это будет крайне неэффективно и серьезно тратит драгоценное время на вашем сервере, просто планируйте задачу в bukkit, чтобы проверять каждые 30 секунд, в какое время это ... –

+0

Как мне это сделать, извините im new для кодирования bukkit – joejoethemonkey

+0

Читайте дальше это: http://wiki.bukkit.org/Scheduler_Programming –

ответ

1

WorldEvent не событие, которое в настоящее время срабатывает. WorldEvent - это всего лишь абстрактный класс, который представляет WorldEvents.

Использование ChunkLoadEvent, ChunkPopulateEvent, ChunkUnloadEvent, PortalCreateEvent, SpawnChangeEvent, StructureGrowEvent, WorldInitEvent, WorldLoadEvent, WorldSaveEvent, WorldUnloadEvent как события. Подробнее об этом см. В документации Spigot. https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/world/package-summary.html

Для чего вы хотите создать задачу, которая будет проверять время на каждый тик. Проверка того, что каждый тик не должна быть слишком неэффективной, если вы просто проверяете мировое время.

Приведенный ниже пример показывает, как выполнить задачу, используя внутренний класс. Это лучший способ создать класс и расширить его с помощью BukkitRunnable и сделать тот же код, что и в нем.

public void scheduleTimer(Plugin plugin, final World world) { 
    plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { 
     public void run() { 
      long time = world.getTime(); 
      // -469 78 418 
      // -469 30 433 
      if (time == 13000) { 
       int x = -469; 
       for (int y = 30; y < 80; y++) { 
        for (int z = 402; z < 418; z++) { 
         Location location = new Location(e.getWorld(), x, y, z); 
         location.getBlock().setType(Material.BRICK); 

        } 
       } 
      } 
     } 
    }, 1, 1); 
}