package xyz.etztech.serverapi; import org.bukkit.BanEntry; import org.bukkit.BanList; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import xyz.etztech.serverapi.commands.MainCommand; import xyz.etztech.serverapi.listeners.AsyncPlayerChatListener; import xyz.etztech.serverapi.token.TokenList; import xyz.etztech.serverapi.tps.TPS; import xyz.etztech.serverapi.web.IProvider; import xyz.etztech.serverapi.web.Web; import xyz.etztech.serverapi.web.api.*; import java.util.*; import java.util.logging.Logger; public class ServerAPI extends JavaPlugin implements IProvider { private static ServerAPI instance; private static TPS tps; private Web web = new Web(this); private final Logger log = Logger.getLogger( "Minecraft" ); private static final List chat = new ArrayList<>(); @Override public void onEnable() { instance = this; web = new Web(this); saveDefaultConfig(); reloadConfig(); if (isEnabled()) { new AsyncPlayerChatListener(this); new MainCommand(this); tps = new TPS(); getServer().getScheduler().scheduleSyncRepeatingTask(this, tps, 1000, 50); } } @Override public void onDisable() { web.stop(); } @Override public void reloadConfig() { super.reloadConfig(); web.stop(); web.start( getConfig().getInt("port", 8080), new TokenList(getConfig().getConfigurationSection("auth")), getConfig().getStringList("custom") ); } public void log(String message) { log.info( "[ServerAPI]: " + message ); } public static ServerAPI getInstance() { return instance; } public static TPS getTPS() { return tps; } public static List getChat() { return chat; } @Override public TPSAPI TPS() { return new TPSAPI(tps.getHistory()); } @Override public WorldAPI world(String name) { for (World world : getServer().getWorlds()) { if (world.getName().equalsIgnoreCase(name)) { return WorldAPI.fromMinecraft(world); } } return new WorldAPI("unknown", 0, 0, WorldAPI.WEATHER_UNKNOWN); } @Override public List worlds() { List worldAPIS = new ArrayList<>(); for (World world : getServer().getWorlds()) { worldAPIS.add(WorldAPI.fromMinecraft(world)); } return worldAPIS; } @Override public Set players() { Set players = new HashSet<>(); for (Player player : getServer().getOnlinePlayers()) { players.add(PlayerAPI.fromMinecraft(player)); } return players; } @Override public Set bans() { Set bans = new HashSet<>(); for (BanEntry entry : getServer().getBanList(BanList.Type.NAME).getBanEntries()) { bans.add(BanAPI.fromMinecraft(entry)); } return bans; } @Override public List chat() { return chat; } @Override public void kick(BanAPI kick) { Player player = Bukkit.getPlayerExact(kick.getTarget()); if (player != null) { getServer().getScheduler().runTask(this, () -> { player.kickPlayer("You have been kicked: " + kick.getReason()); }); } } @Override public void ban(BanAPI ban) { Date expires = null; if (ban.getExpiration() != 0) { expires = new Date(ban.getExpiration()); } Bukkit.getBanList(BanList.Type.NAME).addBan(ban.getTarget(), ban.getReason(), expires, "ServerAPI"); Player player = Bukkit.getPlayerExact(ban.getTarget()); if (player != null) { getServer().getScheduler().runTask(this, () -> { player.kickPlayer("You have been banned: " + ban.getReason()); }); } } @Override public void unban(BanAPI ban) { Bukkit.getBanList(BanList.Type.NAME).pardon(ban.getTarget()); } @Override public void broadcast(BroadcastAPI broadcast) { Bukkit.broadcastMessage(String.format("%s > %s", broadcast.getFrom(), broadcast.getMessage())); } @Override public void custom(CustomAPI custom) { getServer().getScheduler().runTask(this, () -> { getServer().dispatchCommand(getServer().getConsoleSender(), custom.build()); }); } @Override public PingAPI ping() { return PingAPI.fromMinecraft(getServer()); } @Override public List plugins() { List plugins = new ArrayList<>(); for (Plugin plugin : getServer().getPluginManager().getPlugins()) { plugins.add(PluginAPI.fromMinecraft(plugin)); } return plugins; } }