Better multiworld support.
This commit is contained in:
@@ -8,6 +8,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
@@ -487,17 +488,45 @@ public class ArenaMasterImpl implements ArenaMaster
|
|||||||
// If no arenas were found, create a default node.
|
// If no arenas were found, create a default node.
|
||||||
if (arenanames == null || arenanames.isEmpty()) {
|
if (arenanames == null || arenanames.isEmpty()) {
|
||||||
createArenaNode("default", plugin.getServer().getWorlds().get(0));
|
createArenaNode("default", plugin.getServer().getWorlds().get(0));
|
||||||
arenanames = config.getKeys("arenas");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establish the list.
|
|
||||||
arenas = new LinkedList<Arena>();
|
arenas = new LinkedList<Arena>();
|
||||||
|
for (World w : Bukkit.getServer().getWorlds()) {
|
||||||
for (String arenaname : arenanames) {
|
loadArenasInWorld(w.getName());
|
||||||
loadArena(arenaname);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadArenasInWorld(String worldName) {
|
||||||
|
Set<String> arenaNames = config.getKeys("arenas");
|
||||||
|
if (arenaNames == null || arenaNames.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (String arenaName : arenaNames) {
|
||||||
|
Arena arena = getArenaWithName(arenaName);
|
||||||
|
if (arena != null) continue;
|
||||||
|
|
||||||
|
String arenaWorld = config.getString("arenas." + arenaName + ".settings.world", null);
|
||||||
|
if (!arenaWorld.equals(worldName)) continue;
|
||||||
|
|
||||||
|
loadArena(arenaName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unloadArenasInWorld(String worldName) {
|
||||||
|
Set<String> arenaNames = config.getKeys("arenas");
|
||||||
|
if (arenaNames == null || arenaNames.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (String arenaName : arenaNames) {
|
||||||
|
Arena arena = getArenaWithName(arenaName);
|
||||||
|
if (arena == null) continue;
|
||||||
|
|
||||||
|
String arenaWorld = arena.getWorld().getName();
|
||||||
|
if (!arenaWorld.equals(worldName)) continue;
|
||||||
|
|
||||||
|
arena.forceEnd();
|
||||||
|
arenas.remove(arena);
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedArena = arenas.get(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Arena loadArena(String arenaname) {
|
private Arena loadArena(String arenaname) {
|
||||||
@@ -510,7 +539,7 @@ public class ArenaMasterImpl implements ArenaMaster
|
|||||||
world = plugin.getServer().getWorld(worldName);
|
world = plugin.getServer().getWorld(worldName);
|
||||||
|
|
||||||
if (world == null) {
|
if (world == null) {
|
||||||
Messenger.severe("The world '" + worldName + "' for arena '" + arenaname + "' does not exist!");
|
Messenger.warning("World '" + worldName + "' for arena '" + arenaname + "' was not found...");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -528,9 +557,15 @@ public class ArenaMasterImpl implements ArenaMaster
|
|||||||
|
|
||||||
// Register the permission
|
// Register the permission
|
||||||
registerPermission("mobarena.arenas." + arenaname.toLowerCase(), PermissionDefault.TRUE);
|
registerPermission("mobarena.arenas." + arenaname.toLowerCase(), PermissionDefault.TRUE);
|
||||||
|
|
||||||
|
// Set the selected arena, if it is null
|
||||||
|
if (selectedArena == null) {
|
||||||
|
selectedArena = arena;
|
||||||
|
}
|
||||||
|
|
||||||
// Finally, add it to the arena list.
|
// Finally, add it to the arena list.
|
||||||
arenas.add(arena);
|
arenas.add(arena);
|
||||||
|
Messenger.info("Loaded arena '" + arenaname + "'.");
|
||||||
return arena;
|
return arena;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -123,6 +123,10 @@ public interface ArenaMaster
|
|||||||
*/
|
*/
|
||||||
public void loadArenas();
|
public void loadArenas();
|
||||||
|
|
||||||
|
public void loadArenasInWorld(String worldName);
|
||||||
|
|
||||||
|
public void unloadArenasInWorld(String worldName);
|
||||||
|
|
||||||
public Arena createArenaNode(String configName, World world);
|
public Arena createArenaNode(String configName, World world);
|
||||||
|
|
||||||
public void removeArenaNode(Arena arena);
|
public void removeArenaNode(Arena arena);
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.block.*;
|
import org.bukkit.event.block.*;
|
||||||
import org.bukkit.event.entity.*;
|
import org.bukkit.event.entity.*;
|
||||||
import org.bukkit.event.player.*;
|
import org.bukkit.event.player.*;
|
||||||
|
import org.bukkit.event.world.WorldLoadEvent;
|
||||||
|
import org.bukkit.event.world.WorldUnloadEvent;
|
||||||
|
|
||||||
import com.garbagemule.MobArena.Messenger;
|
import com.garbagemule.MobArena.Messenger;
|
||||||
import com.garbagemule.MobArena.MobArena;
|
import com.garbagemule.MobArena.MobArena;
|
||||||
@@ -300,4 +302,23 @@ public class MAGlobalListener implements Listener
|
|||||||
arena.getEventListener().onPlayerPreLogin(event);
|
arena.getEventListener().onPlayerPreLogin(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// //
|
||||||
|
// WORLD EVENTS //
|
||||||
|
// //
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.NORMAL)
|
||||||
|
public void worldLoadEvent(WorldLoadEvent event) {
|
||||||
|
am.loadArenasInWorld(event.getWorld().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.NORMAL)
|
||||||
|
public void worldUnloadEvent(WorldUnloadEvent event) {
|
||||||
|
am.unloadArenasInWorld(event.getWorld().getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user