package org.reunionemu.jreunion.server; import java.util.List; import java.util.Timer; import java.util.TimerTask; import java.util.Vector; import org.reunionemu.jreunion.game.Player; /** * @author Aidamina * @license http://reunion.googlecode.com/svn/trunk/license.txt */ public class TeleportManager { static final float timeout = 30; List<TeleportBucket> teleports = new Vector<TeleportBucket>(); public TeleportManager(){ } public void register(Player player, Map map){ synchronized(teleports){ TeleportBucket bucket = new TeleportBucket(); bucket.from = player.getPosition().getLocalMap(); bucket.to = map; bucket.player = player; teleports.add(bucket); } } public void remove(Player player){ synchronized(teleports){ TeleportBucket remove= null; for(TeleportBucket bucket:teleports){ if(bucket.player.getEntityId() == player.getEntityId()) remove = bucket; } if(remove!=null) teleports.remove(remove); } } public Map getDestination(Player player){ synchronized(teleports){ for(TeleportBucket bucket:teleports){ if(bucket.player.getEntityId() == player.getEntityId()) return bucket.to; } } return null; } public class TeleportBucket extends TimerTask{ public TeleportBucket(){ timer = new Timer(); timer.schedule(this, (long)(timeout*1000)); } Timer timer; public Map from; public Map to; public Player player; @Override public void run() { synchronized(teleports){ teleports.remove(this); } } } }