mirror of
https://github.com/garbagemule/MobArena.git
synced 2025-02-25 08:51:51 +01:00
Better multiworld support.
This commit is contained in:
parent
a6ea9d03da
commit
ddeb0cef44
@ -8,6 +8,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
@ -487,17 +488,45 @@ public class ArenaMasterImpl implements ArenaMaster
|
||||
// If no arenas were found, create a default node.
|
||||
if (arenanames == null || arenanames.isEmpty()) {
|
||||
createArenaNode("default", plugin.getServer().getWorlds().get(0));
|
||||
arenanames = config.getKeys("arenas");
|
||||
}
|
||||
|
||||
// Establish the list.
|
||||
|
||||
arenas = new LinkedList<Arena>();
|
||||
|
||||
for (String arenaname : arenanames) {
|
||||
loadArena(arenaname);
|
||||
for (World w : Bukkit.getServer().getWorlds()) {
|
||||
loadArenasInWorld(w.getName());
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
@ -510,7 +539,7 @@ public class ArenaMasterImpl implements ArenaMaster
|
||||
world = plugin.getServer().getWorld(worldName);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -528,9 +557,15 @@ public class ArenaMasterImpl implements ArenaMaster
|
||||
|
||||
// Register the permission
|
||||
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.
|
||||
arenas.add(arena);
|
||||
Messenger.info("Loaded arena '" + arenaname + "'.");
|
||||
return arena;
|
||||
}
|
||||
|
||||
|
@ -123,6 +123,10 @@ public interface ArenaMaster
|
||||
*/
|
||||
public void loadArenas();
|
||||
|
||||
public void loadArenasInWorld(String worldName);
|
||||
|
||||
public void unloadArenasInWorld(String worldName);
|
||||
|
||||
public Arena createArenaNode(String configName, World world);
|
||||
|
||||
public void removeArenaNode(Arena arena);
|
||||
|
@ -8,6 +8,8 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.*;
|
||||
import org.bukkit.event.entity.*;
|
||||
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.MobArena;
|
||||
@ -300,4 +302,23 @@ public class MAGlobalListener implements Listener
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user