// Path: src/main/java/de/zh32/teleportsigns/configuration/ConfigurationAdapter.java
// public interface ConfigurationAdapter {
// 
// 	List<SignLayout> loadLayouts();
// 
// 	List<GameServer> loadServers();
// 
// 	public long getUpdateInterval();
// 
// 	public int getTeleportCooldown();
// 
// 	public String getDatabasePath();
// 
// 	public int getUpdatePerTicks();
// 
// }
// 
// Path: src/main/java/de/zh32/teleportsigns/sign/TeleportSign.java
// @Data
// @Builder
// @AllArgsConstructor
// public class TeleportSign {
// 
// 	private GameServer server;
// 
// 	private SignLayout layout;
// 
// 	private TeleportSignLocation location;
// 
// 	@Data
// 	@Accessors(chain = true)
// 	@AllArgsConstructor
// 	@EqualsAndHashCode
// 	public static class TeleportSignLocation {
// 		private int x;
// 		private int y;
// 		private int z;
// 		private String worldName;
// 	}
// 
// 	public boolean equals(Object object) {
// 		if (!(object instanceof TeleportSign)) {
// 			return false;
// 
// 
// 		}
// 		TeleportSign teleportSign = (TeleportSign) object;
// 		if (teleportSign.getLocation().equals(this.location)) {
// 			return true;
// 		}
// 		return false;
// 	}
// }
// 
// Path: src/main/java/de/zh32/teleportsigns/task/Callback.java
// public interface Callback<T> {
// 
// 	void finish(T result);
// 
// }
// 
// Path: src/main/java/de/zh32/teleportsigns/task/ServerUpdateTask.java
// public abstract class ServerUpdateTask extends Task<List<GameServer>> {
// 
// 	private final List<GameServer> servers;
// 	private final ServerListPing ping;
// 
// 	public ServerUpdateTask(List<GameServer> servers, ServerListPing slp) {
// 		this.servers = servers;
// 		this.ping = slp;
// 	}
// 
// 	@Override
// 	public void execute() {
// 		List<GameServer> updatedServers = new ArrayList<>();
// 		for (GameServer server : servers) {
// 			if (ping.updateStatus(server)) {
// 				updatedServers.add(server);
// 			}
// 		}
// 		finish(updatedServers);
// 	}
// 
// }
// 
// Path: src/main/java/de/zh32/teleportsigns/task/bukkit/BukkitServerUpdateTask.java
// public class BukkitServerUpdateTask extends ServerUpdateTask implements Runnable {
// 
// 	public BukkitServerUpdateTask(List<GameServer> servers, ServerListPing slp) {
// 		super(servers, slp);
// 	}
// 
// 	@Override
// 	public void run() {
// 		this.execute();
// 	}
// 
// }
// 
// Path: src/main/java/de/zh32/teleportsigns/task/bukkit/BukkitSignUpdateTask.java
// public class BukkitSignUpdateTask extends SignUpdateTask implements Runnable {
// 
// 	private final Plugin plugin;
// 
// 	public BukkitSignUpdateTask(List<TeleportSign> teleportSigns, int updatesPerTick, Plugin plugin) {
// 		super(teleportSigns, updatesPerTick);
// 		this.plugin = plugin;
// 	}
// 
// 	@Override
// 	public void runTaskLater() {
// 		Bukkit.getScheduler().runTaskLater(plugin, this, 1L);
// 	}
// 
// 	@Override
// 	public void updateSign(TeleportSign sign) {
// 		Location location = new Location(
// 				Bukkit.getWorld(sign.getLocation().getWorldName()),
// 				sign.getLocation().getX(),
// 				sign.getLocation().getY(),
// 				sign.getLocation().getZ()
// 		);
// 		Block block = location.getBlock();
// 		if (location.getWorld().getChunkAt(location).isLoaded()) {
// 			if (block.getState() instanceof Sign) {
// 				Sign signBlock = (Sign) block.getState();
// 				String[] lines = sign.getLayout().renderLayoutFor(sign.getServer());
// 				for (int i = 0; i < lines.length; i++) {
// 					signBlock.setLine(i, lines[i]);
// 				}
// 				signBlock.update();
// 			}
// 		}
// 	}
// 
// 	@Override
// 	public void run() {
// 		this.execute();
// 	}
// 
// }


import de.zh32.teleportsigns.configuration.ConfigurationAdapter;
import de.zh32.teleportsigns.sign.TeleportSign;
import de.zh32.teleportsigns.task.Callback;
import de.zh32.teleportsigns.task.ServerUpdateTask;
import de.zh32.teleportsigns.task.bukkit.BukkitServerUpdateTask;
import de.zh32.teleportsigns.task.bukkit.BukkitSignUpdateTask;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import java.util.List;
package de.zh32.teleportsigns;




public class BukkitUpdateLoop extends UpdateLoop {

	private final Plugin plugin;
	private final ConfigurationAdapter configuration;
	private int bukkitTaskId;

// Path: src/main/java/de/zh32/teleportsigns/configuration/ConfigurationAdapter.java
// public interface ConfigurationAdapter {
// 
// 	List<SignLayout> loadLayouts();
// 
// 	List<GameServer> loadServers();
// 
// 	public long getUpdateInterval();
// 
// 	public int getTeleportCooldown();
// 
// 	public String getDatabasePath();
// 
// 	public int getUpdatePerTicks();
// 
// }
// 
// Path: src/main/java/de/zh32/teleportsigns/sign/TeleportSign.java
// @Data
// @Builder
// @AllArgsConstructor
// public class TeleportSign {
// 
// 	private GameServer server;
// 
// 	private SignLayout layout;
// 
// 	private TeleportSignLocation location;
// 
// 	@Data
// 	@Accessors(chain = true)
// 	@AllArgsConstructor
// 	@EqualsAndHashCode
// 	public static class TeleportSignLocation {
// 		private int x;
// 		private int y;
// 		private int z;
// 		private String worldName;
// 	}
// 
// 	public boolean equals(Object object) {
// 		if (!(object instanceof TeleportSign)) {
// 			return false;
// 
// 
// 		}
// 		TeleportSign teleportSign = (TeleportSign) object;
// 		if (teleportSign.getLocation().equals(this.location)) {
// 			return true;
// 		}
// 		return false;
// 	}
// }
// 
// Path: src/main/java/de/zh32/teleportsigns/task/Callback.java
// public interface Callback<T> {
// 
// 	void finish(T result);
// 
// }
// 
// Path: src/main/java/de/zh32/teleportsigns/task/ServerUpdateTask.java
// public abstract class ServerUpdateTask extends Task<List<GameServer>> {
// 
// 	private final List<GameServer> servers;
// 	private final ServerListPing ping;
// 
// 	public ServerUpdateTask(List<GameServer> servers, ServerListPing slp) {
// 		this.servers = servers;
// 		this.ping = slp;
// 	}
// 
// 	@Override
// 	public void execute() {
// 		List<GameServer> updatedServers = new ArrayList<>();
// 		for (GameServer server : servers) {
// 			if (ping.updateStatus(server)) {
// 				updatedServers.add(server);
// 			}
// 		}
// 		finish(updatedServers);
// 	}
// 
// }
// 
// Path: src/main/java/de/zh32/teleportsigns/task/bukkit/BukkitServerUpdateTask.java
// public class BukkitServerUpdateTask extends ServerUpdateTask implements Runnable {
// 
// 	public BukkitServerUpdateTask(List<GameServer> servers, ServerListPing slp) {
// 		super(servers, slp);
// 	}
// 
// 	@Override
// 	public void run() {
// 		this.execute();
// 	}
// 
// }
// 
// Path: src/main/java/de/zh32/teleportsigns/task/bukkit/BukkitSignUpdateTask.java
// public class BukkitSignUpdateTask extends SignUpdateTask implements Runnable {
// 
// 	private final Plugin plugin;
// 
// 	public BukkitSignUpdateTask(List<TeleportSign> teleportSigns, int updatesPerTick, Plugin plugin) {
// 		super(teleportSigns, updatesPerTick);
// 		this.plugin = plugin;
// 	}
// 
// 	@Override
// 	public void runTaskLater() {
// 		Bukkit.getScheduler().runTaskLater(plugin, this, 1L);
// 	}
// 
// 	@Override
// 	public void updateSign(TeleportSign sign) {
// 		Location location = new Location(
// 				Bukkit.getWorld(sign.getLocation().getWorldName()),
// 				sign.getLocation().getX(),
// 				sign.getLocation().getY(),
// 				sign.getLocation().getZ()
// 		);
// 		Block block = location.getBlock();
// 		if (location.getWorld().getChunkAt(location).isLoaded()) {
// 			if (block.getState() instanceof Sign) {
// 				Sign signBlock = (Sign) block.getState();
// 				String[] lines = sign.getLayout().renderLayoutFor(sign.getServer());
// 				for (int i = 0; i < lines.length; i++) {
// 					signBlock.setLine(i, lines[i]);
// 				}
// 				signBlock.update();
// 			}
// 		}
// 	}
// 
// 	@Override
// 	public void run() {
// 		this.execute();
// 	}
// 
// }


// Path: src/main/java/de/zh32/teleportsigns/BukkitUpdateLoop.java
import de.zh32.teleportsigns.configuration.ConfigurationAdapter;
import de.zh32.teleportsigns.sign.TeleportSign;
import de.zh32.teleportsigns.task.Callback;
import de.zh32.teleportsigns.task.ServerUpdateTask;
import de.zh32.teleportsigns.task.bukkit.BukkitServerUpdateTask;
import de.zh32.teleportsigns.task.bukkit.BukkitSignUpdateTask;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import java.util.List;

package de.zh32.teleportsigns;




public class BukkitUpdateLoop extends UpdateLoop {

	private final Plugin plugin;
	private final ConfigurationAdapter configuration;
	private int bukkitTaskId;

	public BukkitUpdateLoop(Plugin plugin, ConfigurationAdapter configuration, List<TeleportSign> teleportSigns, ServerUpdateTask updateTask) {