package net.CyanWool.api.world; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import net.CyanWool.api.Server; import net.CyanWool.api.io.WorldIOService; import net.CyanWool.api.scheduler.Task; public class WorldManager { private Server server; private final List<WorldEntry> worldsEntry = new CopyOnWriteArrayList<WorldEntry>(); private WorldIOService service; public WorldManager(Server server, WorldIOService service) { this.server = server; this.service = service; } public Server getServer() { return server; } public List<World> getWorlds() { ArrayList<World> worlds = new ArrayList<World>(); for (WorldEntry entry : worldsEntry) { worlds.add(entry.getWorld()); } return worlds; } public void loadWorld(final World world) { service.readWorld(world); } public boolean addWorld(final World world) { for (WorldEntry entry : worldsEntry) { if (entry.getWorld().getName().equals(world.getName())) { return false; } } Task thread = server.getScheduler().runTaskRepeat(new Runnable() { @Override public void run() { world.onTick(); } }, 1, 1); WorldEntry we = new WorldEntry(world, thread); worldsEntry.add(we); server.getLogger().info("Added new world: " + world.getName()); return true; } public World getWorld(String name) { for (WorldEntry entry : worldsEntry) { if (entry.getWorld().getName().equals(name)) { return entry.getWorld(); } } return null; } public void removeWorld(final World world) { // Save // world.saveAll(); // ??? world.saveAll(); service.saveWorld(world); worldsEntry.remove(world); // stopWorldEntry(world); stopWorldEntry1(world); server.getLogger().info("removed world: " + world.getName()); } public void saveAllWorlds() { // Iterator<WorldEntry> it = worldsEntry.iterator(); // while (it.hasNext()) { // WorldEntry w = it.next(); // w.getTask().cancel(false); // it.remove(); // } for (WorldEntry w : worldsEntry) { w.getTask().cancel(); worldsEntry.remove(w); } } private void stopWorldEntry1(World world) { for (WorldEntry world1 : worldsEntry) { if (world1.getWorld().getName().equals(world.getName())) { world1.getTask().cancel(false); worldsEntry.remove(world1); } } } // Needed ? private boolean stopWorldEntry(World world) { Iterator<WorldEntry> it = worldsEntry.iterator(); while (it.hasNext()) { WorldEntry w = it.next(); if (w.getWorld().getName().equals(world.getName())) { w.getTask().cancel(false); it.remove(); return true; } } return false; } }