BlueMap/BlueMapBukkit/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java

124 lines
3.3 KiB
Java
Raw Normal View History

2020-01-11 11:32:47 +01:00
package de.bluecolored.bluemap.bukkit;
2020-01-15 20:20:22 +01:00
import java.io.File;
import java.io.IOException;
import java.util.UUID;
2020-01-18 00:59:51 +01:00
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
2020-01-15 20:20:22 +01:00
import org.bstats.bukkit.MetricsLite;
2020-01-18 00:59:51 +01:00
import org.bukkit.Bukkit;
2020-01-15 20:20:22 +01:00
import org.bukkit.World;
2020-01-11 11:32:47 +01:00
import org.bukkit.plugin.java.JavaPlugin;
2020-01-15 20:20:22 +01:00
import de.bluecolored.bluemap.common.plugin.Plugin;
import de.bluecolored.bluemap.common.plugin.serverinterface.ServerEventListener;
import de.bluecolored.bluemap.common.plugin.serverinterface.ServerInterface;
import de.bluecolored.bluemap.core.logger.Logger;
2020-01-11 11:32:47 +01:00
2020-01-15 20:20:22 +01:00
public class BukkitPlugin extends JavaPlugin implements ServerInterface {
2020-01-18 00:59:51 +01:00
private static BukkitPlugin instance;
2020-01-15 20:20:22 +01:00
private Plugin bluemap;
private EventForwarder eventForwarder;
private BukkitCommands commands;
2020-01-15 20:20:22 +01:00
public BukkitPlugin() {
Logger.global = new JavaLogger(getLogger());
this.eventForwarder = new EventForwarder();
this.bluemap = new Plugin("bukkit", this);
this.commands = new BukkitCommands(bluemap.getCommands());
2020-01-18 00:59:51 +01:00
BukkitPlugin.instance = this;
2020-01-15 20:20:22 +01:00
}
2020-01-11 11:32:47 +01:00
@Override
public void onEnable() {
2020-01-15 20:20:22 +01:00
new MetricsLite(this);
2020-01-11 11:32:47 +01:00
2020-01-18 01:30:38 +01:00
//save world so the level.dat is present on new worlds
for (World world : getServer().getWorlds()) {
world.save();
}
2020-01-15 20:20:22 +01:00
getServer().getPluginManager().registerEvents(eventForwarder, this);
getCommand("bluemap").setExecutor(commands);
getServer().getScheduler().runTaskAsynchronously(this, () -> {
try {
Logger.global.logInfo("Loading...");
this.bluemap.load();
if (bluemap.isLoaded()) Logger.global.logInfo("Loaded!");
} catch (Throwable t) {
Logger.global.logError("Failed to load!", t);
}
});
2020-01-11 11:32:47 +01:00
}
@Override
public void onDisable() {
2020-01-15 20:20:22 +01:00
Logger.global.logInfo("Stopping...");
bluemap.unload();
Logger.global.logInfo("Saved and stopped!");
}
@Override
public void registerListener(ServerEventListener listener) {
eventForwarder.addListener(listener);
}
@Override
public void unregisterAllListeners() {
eventForwarder.removeAllListeners();
}
@Override
public UUID getUUIDForWorld(File worldFolder) throws IOException {
2020-01-18 00:59:51 +01:00
final File normalizedWorldFolder = worldFolder.getCanonicalFile();
Future<UUID> futureUUID;
if (!Bukkit.isPrimaryThread()) {
futureUUID = Bukkit.getScheduler().callSyncMethod(BukkitPlugin.getInstance(), () -> getUUIDForWorldSync(normalizedWorldFolder));
} else {
futureUUID = CompletableFuture.completedFuture(getUUIDForWorldSync(normalizedWorldFolder));
}
try {
return futureUUID.get();
} catch (InterruptedException e) {
throw new IOException(e);
} catch (ExecutionException e) {
if (e.getCause() instanceof IOException) {
throw (IOException) e.getCause();
} else {
throw new IOException(e);
}
}
}
private UUID getUUIDForWorldSync (File worldFolder) throws IOException {
2020-01-15 20:20:22 +01:00
for (World world : getServer().getWorlds()) {
if (worldFolder.equals(world.getWorldFolder().getCanonicalFile())) return world.getUID();
2020-01-15 20:20:22 +01:00
}
2020-01-11 11:32:47 +01:00
throw new IOException("There is no world with this folder loaded: " + worldFolder.getPath());
2020-01-15 20:20:22 +01:00
}
@Override
public File getConfigFolder() {
return getDataFolder();
2020-01-11 11:32:47 +01:00
}
2020-01-15 20:20:22 +01:00
public Plugin getBlueMap() {
return bluemap;
2020-01-11 11:32:47 +01:00
}
2020-01-18 00:59:51 +01:00
public static BukkitPlugin getInstance() {
return instance;
}
2020-01-11 11:32:47 +01:00
}