package net.minecraft.server;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import lombok.Getter;
import java.util.Collection;
import java.util.List;
import javax.annotation.Nullable;
import org.apache.logging.log4j.Logger;
// CraftBukkit end
import org.torch.server.TorchChunkProvider;
import static org.torch.server.TorchServer.logger;
public class ChunkProviderServer implements IChunkProvider, org.torch.api.TorchServant {
@Getter public final TorchChunkProvider reactor;
private static final Logger a = logger;
private static final double UNLOAD_QUEUE_RESIZE_FACTOR = TorchChunkProvider.UNLOAD_QUEUE_RESIZE_FACTOR;
public final WorldServer world;
public final ChunkGenerator chunkGenerator;
public final IChunkLoader chunkLoader;
// TODO: port
// private long lastQueuedSaves = 0L;
// private long lastProcessedSaves = 0L;
// private long lastSaveStatPrinted = System.currentTimeMillis();
// protected Chunk lastChunkByPos = null;
public final it.unimi.dsi.fastutil.longs.LongSet unloadQueue;
public Long2ObjectOpenHashMap<Chunk> chunks;
public ChunkProviderServer(WorldServer worldserver, IChunkLoader ichunkloader, ChunkGenerator chunkgenerator) {
reactor = new TorchChunkProvider(worldserver, ichunkloader, chunkgenerator, this);
this.world = worldserver;
this.chunkLoader = ichunkloader;
this.chunkGenerator = chunkgenerator;
this.unloadQueue = reactor.getUnloadQueue();
this.chunks = reactor.getChunks();
}
public Collection<Chunk> a() {
return reactor.getLoadedChunks();
}
public void unload(Chunk chunk) {
reactor.postChunkToUnload(chunk);
}
public void b() {
reactor.unloadAllChunks();
}
@Override
@Nullable
public Chunk getLoadedChunkAt(int i, int j) {
return reactor.getLoadedChunkAt(i, j);
}
@Nullable
public Chunk getOrLoadChunkAt(int i, int j) {
return reactor.getOrLoadChunkAt(i, j);
}
@Nullable
public Chunk originalGetOrLoadChunkAt(int i, int j) {
return reactor.originalGetOrLoadChunkAt(i, j);
}
// CraftBukkit start
public Chunk getChunkIfLoaded(int x, int z) {
return reactor.getChunkIfLoaded(x, z, false);
}
// CraftBukkit end
@Override
public Chunk getChunkAt(int i, int j) {
return reactor.getChunkAt(i, j);
}
public Chunk getChunkAt(int i, int j, Runnable runnable) {
return reactor.getChunkAt(i, j, runnable);
}
public Chunk getChunkAt(int i, int j, Runnable runnable, boolean generate) {
return reactor.getChunkAt(i, j, runnable, generate);
}
public Chunk originalGetChunkAt(int i, int j) {
return reactor.originalGetChunkAt(i, j);
}
@Nullable
public Chunk loadChunk(int i, int j) {
return reactor.loadChunkFromFile(i, j);
}
public void saveChunkNOP(Chunk chunk) {
reactor.saveChunkExtraData(chunk);
}
public void saveChunk(Chunk chunk) {
reactor.saveChunkData(chunk);
}
public boolean a(boolean flag) {
return reactor.saveChunks(flag);
}
public void c() {
this.chunkLoader.b();
}
@Override
public boolean unloadChunks() {
return reactor.unloadChunks();
}
// CraftBukkit start
public boolean unloadChunk(Chunk chunk, boolean save) {
return reactor.unloadChunk(chunk, save);
}
// CraftBukkit end
public boolean e() {
return reactor.canSave();
}
@Override
public String getName() {
return reactor.getName();
}
public List<BiomeBase.BiomeMeta> a(EnumCreatureType enumcreaturetype, BlockPosition blockposition) {
return reactor.getPossibleCreatures(enumcreaturetype, blockposition);
}
@Nullable
public BlockPosition a(World world, String s, BlockPosition blockposition, boolean flag) {
return reactor.findNearestMapFeature(world, s, blockposition, flag);
}
public int g() {
return reactor.getLoadedChunkCount();
}
public boolean isLoaded(int i, int j) {
return reactor.isLoaded(i, j);
}
@Override
public boolean e(int i, int j) {
return reactor.isChunkGeneratedAt(i, j);
}
}