ServerAPI/src/main/java/xyz/etztech/serverapi/ServerAPI.java

183 lines
5.0 KiB
Java

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<ChatAPI> 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<ChatAPI> 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<WorldAPI> worlds() {
List<WorldAPI> worldAPIS = new ArrayList<>();
for (World world : getServer().getWorlds()) {
worldAPIS.add(WorldAPI.fromMinecraft(world));
}
return worldAPIS;
}
@Override
public Set<PlayerAPI> players() {
Set<PlayerAPI> players = new HashSet<>();
for (Player player : getServer().getOnlinePlayers()) {
players.add(PlayerAPI.fromMinecraft(player));
}
return players;
}
@Override
public Set<BanAPI> bans() {
Set<BanAPI> bans = new HashSet<>();
for (BanEntry entry : getServer().getBanList(BanList.Type.NAME).getBanEntries()) {
bans.add(BanAPI.fromMinecraft(entry));
}
return bans;
}
@Override
public List<ChatAPI> 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<PluginAPI> plugins() {
List<PluginAPI> plugins = new ArrayList<>();
for (Plugin plugin : getServer().getPluginManager().getPlugins()) {
plugins.add(PluginAPI.fromMinecraft(plugin));
}
return plugins;
}
}