(Slick 2D & TileD) Best Way to Move Player or Swap Maps?

Hello,
This is my first topic here on JGO and i am glad to be a part of this community. I have a good understanding of java through college courses and self education, but I am relatively new to Java Game Development. I Have made games similar to pong, space invaders, pac man in JFrame but nothing to brag about. Currently I am trying to use the slick2d & lwjgl libraries along with TileD Map Editor for the first time to create a basic RPG. I am trying to have a " Final Fantasy(1-6) / Pokemon" Type movement/map transfer System. I have gotten as far as using “object layers” to create rectangles to use for Collision & transfer data. I dont know how to get the correct location to transfer the player according to the specific rectangles properties.
Within my “transport” objects layer each object has 2 “Properties” (xpos & ypos). These are the location that the player needs to be transported to from that specific object. Along with that how would i use that system to switch actual maps (towns,worldmap,caves etc.). I know this might seem like a “Newb” problem, but it has really put a halt on my game.

GameMap Class
[spoiler]

package com.oraclearts.javagame;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.geom.Shape;
import org.newdawn.slick.tiled.TiledMap;

public class GameMap extends TiledMap {

	private final List<Shape> collShapes = new ArrayList<Shape>();
	private final List<Shape> tranShapes = new ArrayList<Shape>();

	public GameMap(String mapPath) throws SlickException {
		super(mapPath);
		
		System.out.println(this.collShapes);
		System.out.println(this.tranShapes);
		
		//group Id is the physical layer -> int ( ie. 0 = collision  1 = transport )
		
		final int tranGroup = 1;
		final int collGroup = 0;
		
		for (int i = 0; i < super.getObjectCount(collGroup); i++) {

			Rectangle collRect = new Rectangle(super.getObjectX(collGroup, i),
					super.getObjectY(collGroup, i), super.getObjectWidth(
							collGroup, i), super.getObjectHeight(collGroup, i));
			collShapes.add(collRect);
		}
		
		for (int j = 0; j < super.getObjectCount(tranGroup); j++) {
			Rectangle tranRect = new Rectangle(super.getObjectX(tranGroup, j),
					super.getObjectY(tranGroup, j), super.getObjectWidth(
							tranGroup, j), super.getObjectHeight(tranGroup, j));
			tranShapes.add(tranRect);
		}
	}

	public List<Shape> getCollShapes() {
		return collShapes;
	}

	public List<Shape> getTranShapes() {
		return tranShapes;
	}

	public boolean isTransport(Shape s) {
		Iterator<Shape> jt = tranShapes.iterator();
		while (jt.hasNext()) {
			if (jt.next().intersects(s))
				return true;
		}

		return false;
	}

	public boolean isColliding(Shape s) {
		Iterator<Shape> it = collShapes.iterator();
		while (it.hasNext()) {
			if (it.next().intersects(s))
				return true;
		}

		return false;
	}

}

[/spoiler]
Game Class
[spoiler]

package com.oraclearts.javagame;

import java.util.Iterator;

import org.lwjgl.input.Keyboard;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.geom.Shape;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

public class Game extends BasicGameState {
	private GameMap gameMap;
	private Item items;
	private Player character;
	private Person person = new Person();
	private boolean isCollDisplayed = false;
	private boolean isTransDisplayed = false;
	private static float viewportX = 0;
	private static float viewportY = 0;
	private static int viewportW = ConfigValues.RESOLUTION_WIDTH;
	private static int viewportH = ConfigValues.RESOLUTION_HEIGHT;
	private static int viewportWTile = viewportW / ConfigValues.MAP_TILE_SIZE;
	private static int viewportHTile = viewportH / ConfigValues.MAP_TILE_SIZE;
	private static int limitRight, limitLeft, limitTop, limitBottom;

	@Override
	public void init(GameContainer container, StateBasedGame state)
			throws SlickException {
		gameMap = new GameMap(Constant.MAP_PATH);
		character = new Player("player", 8 * 32, 12*32);
		items = new Item();
		limitRight = gameMap.getWidth() * ConfigValues.MAP_TILE_SIZE
				- ConfigValues.RESOLUTION_WIDTH;
		limitLeft = 0;
		limitTop = 0;
		limitBottom = gameMap.getHeight() * ConfigValues.MAP_TILE_SIZE
				- ConfigValues.RESOLUTION_HEIGHT;
		System.out.println("Game.init() called");
	}

	@Override
	public void render(GameContainer container, StateBasedGame state, Graphics g)
			throws SlickException {
		// offset x and y to display are calculated from a given tile
		int x = (int) (viewportX % ConfigValues.MAP_TILE_SIZE);
		int y = (int) (viewportY % ConfigValues.MAP_TILE_SIZE);

		gameMap.render(-x, -y,
				(int) (viewportX / ConfigValues.MAP_TILE_SIZE),
				(int) (viewportY / ConfigValues.MAP_TILE_SIZE),
				// We have to display one more tile on the left and on the
				// bottom because of offset x and y
				viewportWTile + ConfigValues.MAP_TILE_SIZE, viewportHTile
				+ ConfigValues.MAP_TILE_SIZE,
				gameMap.getLayerIndex(Constant.MAP_LAYER_BACKGROUND), false);
		
		gameMap.render(-x, -y, (int) (viewportX / ConfigValues.MAP_TILE_SIZE),
				(int) (viewportY / ConfigValues.MAP_TILE_SIZE), viewportWTile
				+ ConfigValues.MAP_TILE_SIZE, viewportHTile
				+ ConfigValues.MAP_TILE_SIZE,
				gameMap.getLayerIndex(Constant.MAP_LAYER_FOREGROUND), false);
		
		character.render(g);
		
		person.render(g);
		
		gameMap.render(-x, -y, (int) (viewportX / ConfigValues.MAP_TILE_SIZE),
				(int) (viewportY / ConfigValues.MAP_TILE_SIZE), viewportWTile
				+ ConfigValues.MAP_TILE_SIZE, viewportHTile
				+ ConfigValues.MAP_TILE_SIZE,
				gameMap.getLayerIndex(Constant.MAP_LAYER_TOP), false);
		
		// Draw hitbox
		if (isCollDisplayed) {
			Iterator<Shape> it = gameMap.getCollShapes().iterator();
			while (it.hasNext()) {
				g.draw(it.next());
			}
		}
		if (isTransDisplayed) {
			Iterator<Shape> jt = gameMap.getTranShapes().iterator();
			while (jt.hasNext()) {
				g.draw(jt.next());
			}
		}
		g.drawString("press h", 200, 10);
		g.drawString("press t", 200, 20);
		g.drawImage(items.BOOTS.get(5),200, 150);

	}

	@Override
	public void update(GameContainer container, StateBasedGame game, int delta)
			throws SlickException {
		Input input = container.getInput();
		float viewportXOffset = 0, viewportYOffset = 0;
		float characterVelocityX = 0, characterVelocityY = 0;
		int direction = -1;

		if (input.isKeyDown(Keyboard.KEY_RIGHT)) {
			direction = Character.DIRECTION_RIGHT;
			if (character.isCenteredX()) {
				viewportXOffset = character.getSpeed();

				if (viewportX + viewportXOffset > limitRight) {
					viewportXOffset = 0;
					characterVelocityX = character.getSpeed();
				}
			} else {
				characterVelocityX = character.getSpeed();
			}
		} else if (input.isKeyDown(Keyboard.KEY_LEFT)) {
			direction = Character.DIRECTION_LEFT;
			if (character.isCenteredX()) {
				viewportXOffset = -character.getSpeed();

				if (viewportX + viewportXOffset < limitLeft) {
					viewportXOffset = 0;
					characterVelocityX = -character.getSpeed();
				}
			} else {
				characterVelocityX = -character.getSpeed();
			}
		} else if (input.isKeyDown(Keyboard.KEY_UP)) {
			direction = Character.DIRECTION_UP;
			if (character.isCenteredY()) {
				viewportYOffset = -character.getSpeed();

				if (viewportY + viewportYOffset < limitTop) {
					viewportYOffset = 0;
					characterVelocityY = -character.getSpeed();
				}
			} else {
				characterVelocityY = -character.getSpeed();
			}
		} else if (input.isKeyDown(Keyboard.KEY_DOWN)) {
			direction = Character.DIRECTION_DOWN;
			if (character.isCenteredY()) {
				viewportYOffset = character.getSpeed();

				if (viewportY + viewportYOffset > limitBottom) {
					viewportYOffset = 0;
					characterVelocityY = character.getSpeed();
				}
			} else {
				characterVelocityY = character.getSpeed();
			}
		} else if (input.isKeyPressed(Keyboard.KEY_H)) {
			character.toggleDrawingCollision();
			this.isCollDisplayed = !isCollDisplayed;
		} else if (input.isKeyPressed(Keyboard.KEY_T)) {
			character.toggleDrawingTransport();
			this.isTransDisplayed = !isTransDisplayed;
		}


		// COLLISION DETECTION 
		
		if(direction != -1) {
			// Character is colliding ?
			boolean collide = false;
			Iterator<Shape> it = gameMap.getCollShapes().iterator();
			while(it.hasNext()) {
				Shape s = it.next();
				Shape nextS = new Rectangle(s.getX()-viewportXOffset, s.getY()-viewportYOffset, s.getWidth(), s.getHeight());
				collide = nextS.intersects(character.getNextMoveCollbox(direction, characterVelocityX, characterVelocityY));
				if(collide)
					break;
			}
			// Character is transporting ?
			boolean transport = false;
			Iterator<Shape> jt = gameMap.getTranShapes().iterator();
			while(jt.hasNext()) {
				Shape s = jt.next();
				Shape nextS = new Rectangle(s.getX()-viewportXOffset, s.getY()-viewportYOffset, s.getWidth(), s.getHeight());

				transport = nextS.intersects(character.getNextMoveTranbox(direction, characterVelocityX, characterVelocityY));
				if(transport){
					
					
					
					
					
					character.setX(70);
					character.setY(90);
					break;}
			}

			if(!collide) {
				// Updating viewport
				viewportX += viewportXOffset;
				viewportY += viewportYOffset;

				character.moveCharacter(direction, delta, characterVelocityX, characterVelocityY);

				// Updating hitbox coordinates depending on viewport
				it = gameMap.getCollShapes().iterator();
				while(it.hasNext()) {
					Shape s = it.next();
					s.setX(s.getX()-viewportXOffset);
					s.setY(s.getY()-viewportYOffset);
				}
				jt = gameMap.getTranShapes().iterator();
				while(jt.hasNext()) {
					Shape s = jt.next();
					s.setX(s.getX()-viewportXOffset);
					s.setY(s.getY()-viewportYOffset);
				}
			} else {
				character.moveCharacter(direction, delta, 0, 0);
			}

		}// End Collision Detection (if dir !=-1) 
	}

	@Override
	public int getID() {
		System.out.println("Game.getID() called");
		return Constant.ID_GAME_STATE;

	}
}

[/spoiler]

Testmap File (.txm)

[spoiler]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map SYSTEM "http://mapeditor.org/dtd/1.0/map.dtd">
<map version="1.0" orientation="orthogonal" width="60" height="60" tilewidth="32" tileheight="32">
 <tileset firstgid="1" name="ground" tilewidth="32" tileheight="32">
  <image source="ground.png" trans="ff5ef7" width="512" height="1280"/>
 </tileset>
 <tileset firstgid="641" name="outdoorObjects" tilewidth="32" tileheight="32">
  <image source="outdoorObjects.png" trans="ff5ef7" width="512" height="1920"/>
 </tileset>
 <layer name="background" width="60" height="60">
  <data encoding="base64" compression="gzip">
   H4sIAAAAAAAAC+3ZQQrCQAyF4dGVN3DdI7iqKw/jFdx5elukEETBJgPpa/7AWz46n7HC4HBobUjKPNH+2pl7F0fseb39JZHne7z34/pYr6dvzx55voo3Grzb9tr3t4q3Rx8v3k/vwxF73sw++2W/1feLd7/eapN9f610/+3R93grvb/Z58WLFy9evL+93I/Y77fPd0mF/fb6f0Dl9yoaNa/9Pmf1PeO5m2wl3jlP3VPTys3PxSsQvHjx4lUJXrx48aoEL168eFWCFy/e94xTrmIZA94e8/wzexm8ePHqjor3BRrlwZZAOAAA
  </data>
 </layer>
 <layer name="foreground" width="60" height="60">
  <data encoding="base64" compression="gzip">
   H4sIAAAAAAAAC+2ZS07DMBCGk0C5QIU4Bys2QPewr5DYcwcCx+gFeImuKTfopbokEbUwqcex4xk/xv6lUe20fnwdT+xJqipdPXbWdvZkUdZpeUQ2VRRh88auwuvG+3zsNh/q9li8i5H6mHy1L+vZnnc3U/cNXQ/Zvvi38BbedJUzr/h04X1wPD9Tt8fmjV2CRWYqvIUXkmv+S90+Z//mtB9h8aaS/w555f2JY/6rimPu63kqb4r5b27+FSyFlzdvLvvvkIuzfyHmFHlN8l9OvGMyjVm5fl7bj7NqUKZ7oI9Bv3eAf8X4bWV/v2rRZ42j684uOjvT+KPwpst7VdHyzqXzaSzl3sc9L/QbTv7tJXghufJ+G+YwvtSv6UvN9yH9+07wX70Afa721yl5vwL5/lUzLrf4HVMsvLq1oFqjU2MhFl5f4soLrReZV859Y+VVcdjsianxukrw2rw/UvGG2ntshcWbinzyUpynbJWzf0PsR2+Nvo6t0LybPd929r9OJYhX93wSg/dTcDZ/rKK+JmQexq/J81iK+N16updN5cW0m/rXsPvVWW68Nu8Hsce+rQ+NM+99QF7TMqWdnvjn9elfnzbl/eAPQ7YY3EA4AAA=
  </data>
 </layer>
 <layer name="top" width="60" height="60">
  <data encoding="base64" compression="gzip">
   H4sIAAAAAAAAC+3X4QmAIBCAUbMcpP3aqhFaqjHaQBB/nOZ7IHgHN8CXEqzhOua+h7e07Ue7B4BZnFv7G+keILpf9S+9ovtV/wKwiuh+1b/QZy/z/QEAACDCnevz3zy5PgMAa/oApkeejEA4AAA=
  </data>
 </layer>
 <objectgroup name="collision" width="60" height="60">
  <object name="statue" type="collision" x="227" y="119" width="28" height="32"/>
  <object name="guard1" type="collision" x="323" y="221" width="28" height="32"/>
  <object name="guard2" type="collision" x="130" y="219" width="28" height="32"/>
  <object name="leftWall" type="collision" x="3" y="2" width="32" height="476"/>
  <object name="rightWall" type="collision" x="447" y="2" width="32" height="473"/>
  <object name="topWall" type="collision" x="34" y="2" width="415" height="32"/>
  <object name="bottomWall" type="collision" x="33" y="466" width="416" height="10"/>
  <object name="topWall2" type="collision" x="36" y="37" width="188" height="17"/>
  <object name="topWall3" type="collision" x="257" y="36" width="188" height="17"/>
  <object name="collide" type="collision" x="290" y="163" width="28" height="27"/>
  <object name="statue" type="collision" x="736" y="117" width="28" height="32"/>
  <object name="guard1" type="collision" x="832" y="219" width="28" height="32"/>
  <object name="guard2" type="collision" x="639" y="217" width="28" height="32"/>
  <object name="leftWall" type="collision" x="512" y="0" width="32" height="476"/>
  <object name="rightWall" type="collision" x="956" y="0" width="96" height="64"/>
  <object name="topWall" type="collision" x="543" y="0" width="415" height="32"/>
  <object name="bottomWall" type="collision" x="542" y="464" width="416" height="10"/>
  <object name="topWall2" type="collision" x="545" y="31" width="238" height="19"/>
  <object name="topWall3" type="collision" x="766" y="34" width="188" height="17"/>
  <object name="collide" type="collision" x="799" y="161" width="28" height="27"/>
  <object name="statue" type="collision" x="1248" y="117" width="28" height="32"/>
  <object name="guard1" type="collision" x="1344" y="219" width="28" height="32"/>
  <object name="guard2" type="collision" x="1151" y="217" width="28" height="32"/>
  <object name="leftWall" type="collision" x="958" y="176" width="96" height="320"/>
  <object name="rightWall" type="collision" x="1468" y="0" width="32" height="473"/>
  <object name="topWall" type="collision" x="1055" y="0" width="415" height="32"/>
  <object name="bottomWall" type="collision" x="1054" y="464" width="416" height="10"/>
  <object name="topWall2" type="collision" x="1057" y="35" width="234" height="17"/>
  <object name="topWall3" type="collision" x="1278" y="34" width="188" height="17"/>
  <object name="collide" type="collision" x="1311" y="161" width="28" height="27"/>
  <object name="statue" type="collision" x="224" y="629" width="28" height="32"/>
  <object name="guard1" type="collision" x="320" y="731" width="28" height="32"/>
  <object name="guard2" type="collision" x="127" y="729" width="28" height="32"/>
  <object name="leftWall" type="collision" x="0" y="512" width="32" height="476"/>
  <object name="rightWall" type="collision" x="448" y="528" width="96" height="384"/>
  <object name="topWall" type="collision" x="31" y="512" width="415" height="32"/>
  <object name="bottomWall" type="collision" x="30" y="976" width="1440" height="32"/>
  <object name="topWall2" type="collision" x="33" y="547" width="188" height="17"/>
  <object name="topWall3" type="collision" x="254" y="546" width="188" height="17"/>
  <object name="collide" type="collision" x="287" y="673" width="28" height="27"/>
  <object name="statue" type="collision" x="736" y="629" width="28" height="32"/>
  <object name="guard1" type="collision" x="832" y="731" width="28" height="32"/>
  <object name="guard2" type="collision" x="639" y="729" width="28" height="32"/>
  <object name="rightWall" type="collision" x="956" y="512" width="32" height="473"/>
  <object name="topWall" type="collision" x="543" y="512" width="415" height="32"/>
  <object name="bottomWall" type="collision" x="542" y="976" width="416" height="10"/>
  <object name="topWall2" type="collision" x="545" y="547" width="188" height="17"/>
  <object name="topWall3" type="collision" x="766" y="546" width="188" height="17"/>
  <object name="collide" type="collision" x="799" y="673" width="28" height="27"/>
  <object name="statue" type="collision" x="1248" y="629" width="28" height="32"/>
  <object name="guard1" type="collision" x="1344" y="731" width="28" height="32"/>
  <object name="guard2" type="collision" x="1151" y="729" width="28" height="32"/>
  <object name="leftWall" type="collision" x="1024" y="512" width="32" height="476"/>
  <object name="rightWall" type="collision" x="1468" y="512" width="32" height="473"/>
  <object name="topWall" type="collision" x="1055" y="512" width="415" height="32"/>
  <object name="bottomWall" type="collision" x="1054" y="976" width="416" height="10"/>
  <object name="topWall2" type="collision" x="1057" y="547" width="188" height="17"/>
  <object name="topWall3" type="collision" x="1278" y="546" width="188" height="17"/>
  <object name="collide" type="collision" x="1311" y="673" width="28" height="27"/>
  <object name="collide" type="collision" x="160" y="160" width="28" height="27"/>
  <object name="rightWall" type="collision" x="1504" y="-32" width="32" height="1792"/>
  <object name="bottomWall" type="collision" x="32" y="1728" width="608" height="32"/>
  <object name="bottomWall" type="collision" x="0" y="1024" width="32" height="736"/>
  <object name="bottomWall" type="collision" x="704" y="1728" width="800" height="32"/>
  <object name="bottomWall" type="collision" x="64" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="160" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="256" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="352" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="448" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="544" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="640" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="736" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="832" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="928" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="1024" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="1120" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="1216" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="1312" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="1408" y="1120" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="1440" y="1216" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="576" y="1216" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="1056" y="1312" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="448" y="1536" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="544" y="1664" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="768" y="1664" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="608" y="1664" width="32" height="32"/>
  <object name="bottomWall" type="collision" x="736" y="1664" width="32" height="32"/>
 </objectgroup>
 <objectgroup name="transport" width="60" height="60">
  <object name="ent5" type="transport" x="226" y="36" width="28" height="27">
   <properties>
    <property name="xpos" value="39"/>
    <property name="ypos" value="32"/>
   </properties>
  </object>
  <object name="exit4" type="transport" x="224" y="448" width="28" height="27">
   <properties>
    <property name="xpos" value="7"/>
    <property name="ypos" value="18"/>
   </properties>
  </object>
  <object name="exit3" type="transport" x="736" y="448" width="28" height="27">
   <properties>
    <property name="xpos" value="23"/>
    <property name="ypos" value="18"/>
   </properties>
  </object>
  <object name="exit2" type="transport" x="1248" y="448" width="28" height="27">
   <properties>
    <property name="xpos" value="39"/>
    <property name="ypos" value="18"/>
   </properties>
  </object>
  <object name="exit1" type="transport" x="1248" y="960" width="28" height="27">
   <properties>
    <property name="xpos" value="39"/>
    <property name="ypos" value="32"/>
   </properties>
  </object>
  <object name="ent2" type="transport" x="1248" y="544" width="28" height="27">
   <properties>
    <property name="xpos" value="39"/>
    <property name="ypos" value="13"/>
   </properties>
  </object>
  <object name="ent3" type="transport" x="736" y="544" width="28" height="27">
   <properties>
    <property name="xpos" value="23"/>
    <property name="ypos" value="13"/>
   </properties>
  </object>
  <object name="ent4" type="transport" x="224" y="544" width="28" height="27">
   <properties>
    <property name="xpos" value="7"/>
    <property name="ypos" value="13"/>
   </properties>
  </object>
  <object name="ent1" type="transport" x="1248" y="992" width="28" height="27">
   <properties>
    <property name="xpos" value="39"/>
    <property name="ypos" value="29"/>
   </properties>
  </object>
  <object name="playerstart" type="transport" x="672" y="1504" width="28" height="27">
   <properties>
    <property name="xpos" value="21"/>
    <property name="ypos" value="47"/>
   </properties>
  </object>
 </objectgroup>
</map>

[/spoiler]

Please any help/advice would be greatly appreciated. Or if there’s a good tutorial or resource you know of that could steer me in the right direction. Thank you

Slick:
http://slick.ninjacave.com/javadoc/

Lwjgl:
http://www.lwjgl.org/wiki/index.php?title=Main_Page#Getting_started

TileD Map Editor:

I don’t know if I understood you correctly, but what I got is that you need a way to teleport player from map to map and how to have different maps?

Soo for starters, I don’t think you will be able to create a RPG game with collision code in Game class… You need to do a lot of hierarchy stuff so you don’t get lost in your code.
Collision Code should be put into some class like “Entity” or something. It doesn’t belong in Game class. Game class is supposed to be working with Levels, main game loops and stuff, not specific player collision.

You should create a Level or Map class that would contain Entities (NPCs, Walls, Buildings etc…) and tiles. Level class should also be able to render everything it needs. It should also have a method for updating all the entities in that level/map.

Now that you have a level class, you can create multiple levels and put them in a list. So in your game class create an array of a list to store your levels.

Now to your problem. If you want specific object to be able to teleport player, you could check for some condition (for example, steps on) and have some variables ready which point to some level and some x, y coordinates. So when player steps on that object, the object will change the current level of the game, and change player’s x,y position.

I didn’t really get your problem so it is hard for me to help… :’(

Also, you might wanna checkout this source code. It might help you get a better understanding on how to structure your game.
http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=398

Thank you for your help i have this Character Class but i have been afraid to try and work with an entity system(like Artemis) i feel it might be too advanced for me. Do you think I should Make a Collisions Class or add collisions to my characters update method?

package com.oraclearts.javagame;

import org.newdawn.slick.Animation;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.SpriteSheet;
import org.newdawn.slick.geom.Point;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.geom.Shape;

public class Character {

	public final static int DIRECTION_UP=0;
	public final static int DIRECTION_DOWN=1;
	public final static int DIRECTION_LEFT=2;
	public final static int DIRECTION_RIGHT=3;	
	
	private static final int[] CHARACTER_ANIM_DURATION = new int[] {150,150,150,150};
	
	protected String name = "sprite01";
	
	private String spritePath = "sprites/sprite01.png";
	private int tileSize = 32;
	
	private SpriteSheet spriteSheet;
	
	private int offsetCollBoxX = 4;
	private int offsetCollBoxY = 20;
	private int offsetTranBoxX = 4;
	private int offsetTranBoxY = 20;
	
	private Shape collbox = new Rectangle(offsetCollBoxX, offsetCollBoxY, 24, 12);
	private Shape tranbox = new Rectangle(offsetTranBoxX, offsetTranBoxY, 24, 12);
	
	private Animation characterRight;
	private Animation characterLeft;
	private Animation characterUp;
	private Animation characterDown;
	private Animation currentAnimation;
	
	private float x, y;
	private float speed = 1f;
	
	private boolean isCollDisplayed=false;
	private boolean isTranDisplayed=false;
	

	public Character() {
		try {
			spriteSheet = new SpriteSheet(spritePath, tileSize, tileSize);
			
			characterRight = new Animation(false);
			characterLeft = new Animation(false);
			characterUp = new Animation(false);
			characterDown = new Animation(false);
			
			for(int i = 0; i < 3; i++) {
				characterUp.addFrame(spriteSheet.getSprite(i, 3), CHARACTER_ANIM_DURATION[i]);
				characterDown.addFrame(spriteSheet.getSprite(i, 0), CHARACTER_ANIM_DURATION[i]);
				characterLeft.addFrame(spriteSheet.getSprite(i, 1), CHARACTER_ANIM_DURATION[i]);
				characterRight.addFrame(spriteSheet.getSprite(i, 2), CHARACTER_ANIM_DURATION[i]);
			}

			currentAnimation = characterRight;
			
			x = ConfigValues.RESOLUTION_WIDTH / 2 - currentAnimation.getWidth() / 2;
			y = ConfigValues.RESOLUTION_HEIGHT / 2 - currentAnimation.getHeight() / 2;
			
			collbox.setLocation(this.x + offsetCollBoxX, this.y + offsetCollBoxY);
			tranbox.setLocation(this.x + offsetTranBoxX, this.y + offsetTranBoxY);
		
		} catch(SlickException e) {
			System.out.println("Character Sprite Sheet Error");
		}
	}
	
	public Character(String personName,String imagePath, int cellSize, float speed, float x, float y ) {
		try {
			this.setName(personName);
			this.setSpritePath(imagePath);
			this.setTileSize(cellSize);
			this.setSpeed(speed);
			this.setX(x);
			this.setY(y);

			spriteSheet = new SpriteSheet(spritePath,tileSize  ,tileSize);
			
			characterRight = new Animation(false);
			characterLeft = new Animation(false);
			characterUp = new Animation(false);
			characterDown = new Animation(false);
			
			for(int i = 0; i < 3; i++) {
				characterUp.addFrame(spriteSheet.getSprite(i, 3), CHARACTER_ANIM_DURATION[i]);
				characterDown.addFrame(spriteSheet.getSprite(i, 0), CHARACTER_ANIM_DURATION[i]);
				characterLeft.addFrame(spriteSheet.getSprite(i, 1), CHARACTER_ANIM_DURATION[i]);
				characterRight.addFrame(spriteSheet.getSprite(i, 2), CHARACTER_ANIM_DURATION[i]);
			}

			currentAnimation = characterDown;
			
			x = ConfigValues.RESOLUTION_WIDTH / 2 - currentAnimation.getWidth() / 2;
			y = ConfigValues.RESOLUTION_HEIGHT / 2 - currentAnimation.getHeight() / 2;
			
			collbox.setLocation(this.x + offsetCollBoxX, this.y + offsetCollBoxY);
			tranbox.setLocation(this.x + offsetTranBoxX, this.y + offsetTranBoxY);
		
		} catch(SlickException e) {
			System.out.println("Character Sprite Sheet Error");
		}
	
	}
	
	public void render(Graphics g) {
		currentAnimation.draw(x, y);
		g.drawString(name, x , y -35);
		g.drawString(AI, offsetCollBoxX, offsetCollBoxY);
		g.drawString("", offsetCollBoxX, offsetCollBoxY);
	    g.drawString("", offsetTranBoxX+2, offsetTranBoxY+3);
		
		if(isCollDisplayed)
			g.draw(collbox);
		if(isTranDisplayed)
			g.draw(tranbox);
	}
		


	public void moveCharacter(int direction, int delta, float velocityX, float velocityY) {
		this.x += velocityX;
		this.y += velocityY;
		collbox.setLocation(this.x+offsetCollBoxX, this.y+offsetCollBoxY);
		tranbox.setLocation(this.x+offsetTranBoxX, this.y+offsetTranBoxY);
		currentAnimation.update(delta);
		setCurrentAnimation(direction);
	}
	
	private void setCurrentAnimation(int direction) {
		switch(direction) {
		case DIRECTION_UP:
			currentAnimation=characterUp;
			break;
		case DIRECTION_DOWN:
			currentAnimation=characterDown;
			break;
		case DIRECTION_LEFT:
			currentAnimation=characterLeft;
			break;
		case DIRECTION_RIGHT:
			currentAnimation=characterRight;
			break;
		}
	}
	
	public Shape getNextMoveTranbox(int direction, float velocityX, float velocityY) {
		Point p = new Point(tranbox.getX(), tranbox.getY());
		return new Rectangle(p.getX()+velocityX, p.getY()+velocityY, tranbox.getWidth(), tranbox.getHeight());
	}
	
	public Shape getNextMoveCollbox(int direction, float velocityX, float velocityY) {
		Point p = new Point(collbox.getX(), collbox.getY());
		return new Rectangle(p.getX()+velocityX, p.getY()+velocityY, collbox.getWidth(), collbox.getHeight());
	}
	
	private Point getNextMove(int direction, float cx, float cy) {
		Point p = new Point(cx, cy);
		
		switch(direction) {
		case DIRECTION_UP:
			p.setY(cy-this.speed);
			break;
		case DIRECTION_DOWN:
			p.setY(cy+this.speed);
			break;
		case DIRECTION_LEFT:
			p.setX(cx-this.speed);
			break;
		case DIRECTION_RIGHT:
			p.setX(cx+this.speed);
			break;
		}
		
		return p;
	}
	
	public void setX(float x) {
		this.x = x;
	}

	public void setY(float y) {
		this.y = y;
	}
	public Shape getCollBox() {
		return collbox;
	}
	public Shape getTranbox() {
		return tranbox;
	}
	public void toggleDrawingCollision() {
		isCollDisplayed = !isCollDisplayed;
	}
	public void toggleDrawingTransport() {
		isTranDisplayed = !isTranDisplayed;
	}
	
	public  float getX() {
		return x;
	}
	
	public  float getY() {
		return y;
	}
	
	public float getSpeed() {
		return speed;
	}
	
	public String getSpritePath() {
		return spritePath;
	}

	public void setSpritePath(String spritePath) {
		this.spritePath = spritePath;
	}

	public int getTileSize() {
		return tileSize;
	}

	public void setTileSize(int tileSize) {
		this.tileSize = tileSize;
	}

	public int getOffsetCollBoxX() {
		return offsetCollBoxX;
	}

	public void setOffsetCollBoxX(int offsetCollBoxX) {
		this.offsetCollBoxX = offsetCollBoxX;
	}

	public int getOffsetCollBoxY() {
		return offsetCollBoxY;
	}

	public void setOffsetCollBoxY(int offsetCollBoxY) {
		this.offsetCollBoxY = offsetCollBoxY;
	}

	public Animation getCurrentAnimation() {
		return currentAnimation;
	}

	public void setCurrentAnimation(Animation currentAnimation) {
		this.currentAnimation = currentAnimation;
	}

	public void setSpeed(float speed) {
		this.speed = speed;
	}

	public boolean isCenteredX() {
		return 	x == ConfigValues.RESOLUTION_WIDTH / 2 - currentAnimation.getWidth() / 2; 
	}
	
	public boolean isCenteredY() {
		return y == ConfigValues.RESOLUTION_HEIGHT / 2 - currentAnimation.getHeight() / 2;
	}
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}



}