Minestom/src/main/java/net/minestom/server/instance/InstanceManager.java

65 lines
2.1 KiB
Java
Raw Normal View History

2020-04-24 03:25:58 +02:00
package net.minestom.server.instance;
2019-08-11 07:42:56 +02:00
2020-04-24 03:25:58 +02:00
import net.minestom.server.MinecraftServer;
import net.minestom.server.utils.thread.MinestomThread;
2019-09-21 20:42:27 +02:00
import java.io.File;
2019-08-11 07:42:56 +02:00
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
2019-08-11 09:33:27 +02:00
import java.util.UUID;
2019-09-21 20:42:27 +02:00
import java.util.concurrent.ExecutorService;
2019-08-11 07:42:56 +02:00
public class InstanceManager {
2020-04-13 17:17:21 +02:00
private ExecutorService blocksPool = new MinestomThread(MinecraftServer.THREAD_COUNT_BLOCK_UPDATE, MinecraftServer.THREAD_NAME_BLOCK_UPDATE);
2019-09-21 20:42:27 +02:00
2019-08-11 07:42:56 +02:00
private Set<Instance> instances = Collections.synchronizedSet(new HashSet<>());
2019-08-24 21:41:43 +02:00
public InstanceContainer createInstanceContainer(File folder) {
2020-03-29 20:58:30 +02:00
if (folder != null && !folder.exists())
folder.mkdir();
2019-08-24 21:41:43 +02:00
InstanceContainer instance = new InstanceContainer(UUID.randomUUID(), folder);
2019-08-11 07:42:56 +02:00
this.instances.add(instance);
return instance;
}
2019-08-24 21:41:43 +02:00
public InstanceContainer createInstanceContainer() {
return createInstanceContainer(null);
}
public SharedInstance createSharedInstance(InstanceContainer instanceContainer) {
if (instanceContainer == null)
throw new IllegalArgumentException("Instance container cannot be null when creating a Shared instance!");
SharedInstance sharedInstance = new SharedInstance(UUID.randomUUID(), instanceContainer);
instanceContainer.addSharedInstance(sharedInstance);
this.instances.add(sharedInstance);
return sharedInstance;
}
2019-09-21 20:42:27 +02:00
public void updateBlocks() {
if (instances.isEmpty())
return;
long time = System.currentTimeMillis();
2020-03-30 19:48:25 +02:00
for (Instance instance : instances) {
if (instance instanceof InstanceContainer) { // SharedInstance should be updated at the same time (verify?)
blocksPool.execute(() -> {
2019-09-21 20:42:27 +02:00
for (Chunk chunk : instance.getChunks()) {
chunk.updateBlocks(time, instance);
}
2020-03-30 19:48:25 +02:00
});
2019-09-21 20:42:27 +02:00
}
2020-03-30 19:48:25 +02:00
}
2019-09-21 20:42:27 +02:00
}
2019-08-11 07:42:56 +02:00
public Set<Instance> getInstances() {
return Collections.unmodifiableSet(instances);
}
}