package net.glowstone.io.anvil;
import net.glowstone.GlowWorld;
import net.glowstone.io.*;
import net.glowstone.io.nbt.NbtPlayerDataService;
import net.glowstone.io.nbt.NbtScoreboardIoService;
import net.glowstone.io.nbt.NbtStructureDataService;
import net.glowstone.io.nbt.NbtWorldMetadataService;
import java.io.File;
/**
* A {@link WorldStorageProvider} for the Anvil map format.
*/
public class AnvilWorldStorageProvider implements WorldStorageProvider {
private final File dir;
private GlowWorld world;
private AnvilChunkIoService service;
private NbtWorldMetadataService meta;
private StructureDataService structures;
private PlayerDataService players;
private ScoreboardIoService scoreboard;
public AnvilWorldStorageProvider(File dir) {
this.dir = dir;
}
@Override
public void setWorld(GlowWorld world) {
if (this.world != null)
throw new IllegalArgumentException("World is already set");
this.world = world;
service = new AnvilChunkIoService(dir);
meta = new NbtWorldMetadataService(world, dir);
structures = new NbtStructureDataService(world, new File(dir, "data"));
}
@Override
public File getFolder() {
return dir;
}
@Override
public ChunkIoService getChunkIoService() {
return service;
}
@Override
public WorldMetadataService getMetadataService() {
return meta;
}
@Override
public StructureDataService getStructureDataService() {
return structures;
}
@Override
public PlayerDataService getPlayerDataService() {
if (players == null) {
players = new NbtPlayerDataService(world.getServer(), new File(dir, "playerdata"));
}
return players;
}
@Override
public ScoreboardIoService getScoreboardIoService() {
if (scoreboard == null) {
this.scoreboard = new NbtScoreboardIoService(world.getServer(), new File(dir, "data"));
}
return scoreboard;
}
}