Bukkit Java 编码,夜间检查员

Bukkit Java Coding, night checker

我想制作一个插件,在特定时间填充我地图上的某个位置。但是当我尝试使用事件 WorldEvent 时,它不起作用;它说

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);

                }
            }
        }

    }

WorldEvent 不是正在触发的事件。 WorldEvent 只是代表 WorldEvents 的抽象 class。

使用ChunkLoadEventChunkPopulateEventChunkUnloadEventPortalCreateEventSpawnChangeEventStructureGrowEventWorldInitEventWorldLoadEventWorldSaveEventWorldUnloadEvent 作为事件。在 Spigot Docs https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/world/package-summary.html

阅读更多相关信息

对于您想做的事情,您需要创建一个任务来检查每个滴答声的时间。如果您只检查世界时间,则每次检查都不会太低效。

下面的示例仅显示如何使用内部class创建任务。最好创建 class 并用 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);
}