package org.bukkit.craftbukkit;
import org.bukkit.Location;
import org.bukkit.TravelAgent;
public class CraftTravelAgent extends net.minecraft.world.Teleporter implements TravelAgent
{
public static TravelAgent DEFAULT = null;
private int searchRadius = 128;
private int creationRadius = 16;
private boolean canCreatePortal = true;
public CraftTravelAgent(net.minecraft.world.WorldServer worldserver)
{
super(worldserver);
if(DEFAULT == null && worldserver.provider.dimensionId == 0)
{ // Cauldron
DEFAULT = this;
}
}
public Location findOrCreate(Location target)
{
net.minecraft.world.WorldServer worldServer = ((CraftWorld) target.getWorld()).getHandle();
boolean before = worldServer.theChunkProviderServer.loadChunkOnProvideRequest;
worldServer.theChunkProviderServer.loadChunkOnProvideRequest = true;
Location found = this.findPortal(target);
if(found == null)
{
if(this.getCanCreatePortal() && this.createPortal(target))
{
found = this.findPortal(target);
}
else
{
found = target; // fallback to original if unable to find or create
}
}
worldServer.theChunkProviderServer.loadChunkOnProvideRequest = before;
return found;
}
public Location findPortal(Location location)
{
// net.minecraft.world.Teleporter pta = ((CraftWorld) location.getWorld()).getHandle().getDefaultTeleporter(); // Should be getTravelAgent
// net.minecraft.util.ChunkCoordinates found = pta.findPortal(location.getX(), location.getY(), location.getZ(), this.getSearchRadius());
// return found != null ? new Location(location.getWorld(), found.posX, found.posY, found.posZ, location.getYaw(), location.getPitch()) : null;
throw new UnsupportedOperationException(); // TODO
}
public boolean createPortal(Location location)
{
// net.minecraft.world.Teleporter pta = ((CraftWorld) location.getWorld()).getHandle().getDefaultTeleporter();
// return pta.createPortal(location.getX(), location.getY(), location.getZ(), this.getCreationRadius());
throw new UnsupportedOperationException(); // TODO
}
public TravelAgent setSearchRadius(int radius)
{
this.searchRadius = radius;
return this;
}
public int getSearchRadius()
{
return this.searchRadius;
}
public TravelAgent setCreationRadius(int radius)
{
this.creationRadius = radius < 2 ? 0 : radius;
return this;
}
public int getCreationRadius()
{
return this.creationRadius;
}
public boolean getCanCreatePortal()
{
return this.canCreatePortal;
}
public void setCanCreatePortal(boolean create)
{
this.canCreatePortal = create;
}
}