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;
|
2020-01-17 00:21:46 +01:00
|
|
|
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);
|
2020-01-17 00:21:46 +01:00
|
|
|
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()) {
|
2020-01-17 00:21:46 +01:00
|
|
|
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
|
|
|
|
2020-01-21 20:10:11 +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() {
|
2020-01-17 00:21:46 +01:00
|
|
|
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
|
|
|
}
|