public void render(GameContainer container, Graphics g) throws SlickException
    {        
        if (player1.absolutex - viewW/2 > 0 && player1.absolutex + viewW/2 < mapw) {
            camerax = player1.absolutex - viewW/2;
        }

        if (player1.absolutey - viewH/2 > 0 && player1.absolutey + viewH/2 < maph) {
            cameray = player1.absolutey - viewH/2;
        }

        //Translates the graphics context, anything now drawn will be drawn relative to
        //their absolute positions
        g.translate(-camerax, -cameray);
        grassmap.render(0, 0);        
        player1.drawPlayer();
        
        for(int i = 0; i < OtherPlayers.size(); i++){
            PlayerUpdate player2 = ((PlayerUpdate)OtherPlayers.get(i));
            if(player2.Sprite != null) {
                player2.Sprite.draw(player2.x, player2.y);
            }            
        }

        //Translates the graphics context back so that anything now drawn will be drawn
        //relative to the camera's position
        g.translate(camerax, cameray);
        
        //Draw the  minnimap
        g.setColor(org.newdawn.slick.Color.red);
        g.drawRect(viewW-101, viewH-76,100,75);
        g.fillOval(player1.absolutex/mapw * 100 + (viewW - 101), player1.absolutey/maph * 75 + (viewH - 76),5,5);
        
        //Draw the chat window        
        g.draw(chat);  
        for (int i = 0; i<Messages.size(); i++){
            g.drawString((String)(Messages.get(i)), chatx + 5, chaty + 80 - i*15);
        }
        
        //Draw the input box
        Tinput.render(container, g);
        

        /*Draws the walls, usefull for debugging
        g.setColor(org.newdawn.slick.Color.red);
        for (int i = 0; i<walls.length; i++)
            g.draw(walls[i]);        
        */
    }