Add spawn location cache to reduce blocking on player respawn.

This commit is contained in:
KHobbits 2014-06-16 19:55:34 +01:00
parent c54e9b5dba
commit 7804516793

View file

@ -8,18 +8,29 @@ import java.io.File;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import org.bukkit.Location;
import org.bukkit.World;
public class SpawnStorage extends AsyncStorageObjectHolder<Spawns> implements IEssentialsModule
{
private ConcurrentMap<String, Location> spawns;
public SpawnStorage(final IEssentials ess)
{
super(ess, Spawns.class);
reloadConfig();
}
@Override
public final void reloadConfig()
{
super.reloadConfig();
spawns = new ConcurrentHashMap<String, Location>();
}
@Override
public File getStorageFile()
{
@ -52,6 +63,8 @@ public class SpawnStorage extends AsyncStorageObjectHolder<Spawns> implements IE
unlock();
}
spawns.clear();
if ("default".equalsIgnoreCase(group))
{
loc.getWorld().setSpawnLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
@ -59,6 +72,13 @@ public class SpawnStorage extends AsyncStorageObjectHolder<Spawns> implements IE
}
public Location getSpawn(final String group)
{
Location spawnLocation;
if (spawns.containsKey(group))
{
spawnLocation = spawns.get(group);
}
else
{
acquireReadLock();
try
@ -75,14 +95,21 @@ public class SpawnStorage extends AsyncStorageObjectHolder<Spawns> implements IE
}
if (!spawnMap.containsKey(groupName))
{
return getWorldSpawn();
spawnLocation = getWorldSpawn();
}
else
{
spawnLocation = spawnMap.get(groupName);
}
return spawnMap.get(groupName);
}
finally
{
unlock();
}
spawns.put(group, spawnLocation);
}
return spawnLocation;
}
private Location getWorldSpawn()