@Override
    public void draw()
    {
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glColor3f(1, 0, 0);
        if (this.target != null && this.firingCount > 0)
        {
            Game.getInstance().tessellator.start(GL11.GL_LINES);
            Vector2d vec = this.position.copy().add(this.size.copy().multiply(0.5));
            Game.getInstance().tessellator.addVertexScaled(vec.floatX(), vec.floatY());
            Game.getInstance().tessellator.addVertexScaled(target.floatX(), target.floatY());
            Game.getInstance().tessellator.draw();
        }
        GL11.glEnable(GL11.GL_TEXTURE_2D);

        int minX = facingDir == Direction.LEFT ? 1 : 0;
        int maxX = facingDir == Direction.LEFT ? 0 : 1;
        int minY = facingDir == Direction.UP ? 1 : 0;
        int maxY = facingDir == Direction.UP ? 0 : 1;
        texture.bind();

        if (this.boundingBox != null)
        {
            GL11.glPushMatrix();
            if (this.facingDir.getOffset().y != 0)
            {
                GL11.glTranslatef(position.floatX() + 0.5F, position.floatY() + 0.5F, 0.0F);
                GL11.glRotatef(this.facingDir == Direction.UP ? 90 : -90, 0, 0, 1);
                GL11.glTranslatef(-position.floatX() - 0.5F, -position.floatY() - 0.5F, 0.0F);
            }
            Game.getInstance().tessellator.start(GL11.GL_QUADS);
            Tile.AIR_TILE.colorDynamic(this.position.copy().add(new Vector2d(this.size.x / 2, this.size.y / 2)), new Vector2d(0.5, 0.5), new Vector3f(0.1F, 0.1F, 0.1F), 1.0F);
            Game.getInstance().tessellator.addVertexScaled(this.boundingBox.minVec.floatX(), this.boundingBox.minVec.floatY(), maxX, maxY);
            Tile.AIR_TILE.colorDynamic(this.position.copy().add(new Vector2d(this.size.x / 2, this.size.y / 2)), new Vector2d(-0.5, 0.5), new Vector3f(0.1F, 0.1F, 0.1F), 1.0F);
            Game.getInstance().tessellator.addVertexScaled(this.boundingBox.maxVec.floatX(), this.boundingBox.minVec.floatY(), minX, maxY);
            Tile.AIR_TILE.colorDynamic(this.position.copy().add(new Vector2d(this.size.x / 2, this.size.y / 2)), new Vector2d(-0.5, -0.5), new Vector3f(0.1F, 0.1F, 0.1F), 1.0F);
            Game.getInstance().tessellator.addVertexScaled(this.boundingBox.maxVec.floatX(), this.boundingBox.maxVec.floatY(), minX, minY);
            Tile.AIR_TILE.colorDynamic(this.position.copy().add(new Vector2d(this.size.x / 2, this.size.y / 2)), new Vector2d(0.5, 0.5), new Vector3f(0.1F, 0.1F, 0.1F), 1.0F);
            Game.getInstance().tessellator.addVertexScaled(this.boundingBox.minVec.floatX(), this.boundingBox.maxVec.floatY(), maxX, minY);
            Game.getInstance().tessellator.draw();
            GL11.glPopMatrix();
        }
    }