Adds missing comments to the world event listener and adds faster gate unloading
Replaces the clear all + load all with a method which just removes all relevant portals directly. This should be faster, especially with many gates and worlds
This commit is contained in:
parent
1d642bfcf2
commit
a475e8d8b1
@ -684,7 +684,7 @@ public class PortalHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears all loaded gates and gate data
|
* Clears all loaded gates and gate data from all worlds
|
||||||
*/
|
*/
|
||||||
public static void clearGates() {
|
public static void clearGates() {
|
||||||
lookupBlocks.clear();
|
lookupBlocks.clear();
|
||||||
@ -695,6 +695,44 @@ public class PortalHandler {
|
|||||||
allPortalsNet.clear();
|
allPortalsNet.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears all gates loaded in a given world
|
||||||
|
*
|
||||||
|
* @param world <p>The world containing the portals to clear</p>
|
||||||
|
*/
|
||||||
|
public static void clearGates(World world) {
|
||||||
|
//This is necessary
|
||||||
|
List<Portal> portalsToRemove = new ArrayList<>();
|
||||||
|
allPortals.forEach((portal) -> {
|
||||||
|
if (portal.getWorld().equals(world)) {
|
||||||
|
portalsToRemove.add(portal);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
clearGates(portalsToRemove);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears a given list of portals from all relevant variables
|
||||||
|
*
|
||||||
|
* @param portalsToRemove <p>A list of portals to remove</p>
|
||||||
|
*/
|
||||||
|
private static void clearGates(List<Portal> portalsToRemove) {
|
||||||
|
List<String> portalNames = new ArrayList<>();
|
||||||
|
portalsToRemove.forEach((portal) -> portalNames.add(portal.getName()));
|
||||||
|
lookupBlocks.keySet().removeIf((key) -> portalsToRemove.contains(lookupBlocks.get(key)));
|
||||||
|
lookupNamesNet.keySet().forEach((network) -> lookupNamesNet.get(network).keySet().removeIf((key) ->
|
||||||
|
portalsToRemove.contains(lookupNamesNet.get(network).get(key))));
|
||||||
|
//Remove any networks with no portals
|
||||||
|
lookupNamesNet.keySet().removeIf((key) -> lookupNamesNet.get(key).isEmpty());
|
||||||
|
lookupEntrances.keySet().removeIf((key) -> portalsToRemove.contains(lookupEntrances.get(key)));
|
||||||
|
lookupControls.keySet().removeIf((key) -> portalsToRemove.contains(lookupControls.get(key)));
|
||||||
|
allPortals.removeIf(portalsToRemove::contains);
|
||||||
|
allPortalsNet.keySet().forEach((network) -> allPortalsNet.get(network).removeIf(portalNames::contains));
|
||||||
|
//Remove any networks with no portals
|
||||||
|
allPortalsNet.keySet().removeIf((network) -> allPortalsNet.get(network).isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads all gates for the given world
|
* Loads all gates for the given world
|
||||||
*
|
*
|
||||||
|
@ -8,28 +8,37 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.world.WorldLoadEvent;
|
import org.bukkit.event.world.WorldLoadEvent;
|
||||||
import org.bukkit.event.world.WorldUnloadEvent;
|
import org.bukkit.event.world.WorldUnloadEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This listener listens for the loading and unloading of worlds to load and unload stargates
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
public class WorldEventListener implements Listener {
|
public class WorldEventListener implements Listener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This listener listens for the loading of a world and loads all all gates from the world if not already loaded
|
||||||
|
*
|
||||||
|
* @param event <p>The triggered world load event</p>
|
||||||
|
*/
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onWorldLoad(WorldLoadEvent event) {
|
public void onWorldLoad(WorldLoadEvent event) {
|
||||||
if (!Stargate.managedWorlds.contains(event.getWorld().getName())
|
if (!Stargate.managedWorlds.contains(event.getWorld().getName()) &&
|
||||||
&& PortalHandler.loadAllGates(event.getWorld())) {
|
PortalHandler.loadAllGates(event.getWorld())) {
|
||||||
Stargate.managedWorlds.add(event.getWorld().getName());
|
Stargate.managedWorlds.add(event.getWorld().getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We need to reload all gates on world unload, boo
|
/**
|
||||||
|
* This listener listens for the unloading of a world
|
||||||
|
*
|
||||||
|
* @param event <p>The triggered world unload event</p>
|
||||||
|
*/
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onWorldUnload(WorldUnloadEvent event) {
|
public void onWorldUnload(WorldUnloadEvent event) {
|
||||||
Stargate.debug("onWorldUnload", "Reloading all Stargates");
|
Stargate.debug("onWorldUnload", "Reloading all Stargates");
|
||||||
World w = event.getWorld();
|
World world = event.getWorld();
|
||||||
if (Stargate.managedWorlds.contains(w.getName())) {
|
|
||||||
Stargate.managedWorlds.remove(w.getName());
|
|
||||||
PortalHandler.clearGates();
|
|
||||||
for (World world : Stargate.server.getWorlds()) {
|
|
||||||
if (Stargate.managedWorlds.contains(world.getName())) {
|
if (Stargate.managedWorlds.contains(world.getName())) {
|
||||||
PortalHandler.loadAllGates(world);
|
Stargate.managedWorlds.remove(world.getName());
|
||||||
}
|
PortalHandler.clearGates(world);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user