public void run() {
			attuning.remove(this.player.getName());

			if (player.getLocation().getBlockX() != pX || player.getLocation().getBlockY() != pY || player.getLocation().getBlockZ() != pZ) {
				plugin.sendMessage(player, GRAY + L("movedTooFarAttunementFailed"));
				return;
			}

			Location pLoc = player.getLocation();
			String pWorld = pLoc.getWorld().getName();
			double pX = pLoc.getX();
			double pY = pLoc.getY();
			double pZ = pLoc.getZ();

			float pYaw = pLoc.getYaw();
			float pPitch = pLoc.getPitch();

			String pName = player.getName();

			Attunements.put(pName, new Attunement(pName, pWorld, pX, pY, pZ, pYaw, pPitch));
			plugin.sendMessage(player, GRAY + L("attunedToLifestone"));

			try {
				Database.saveAttunment(pName, pWorld, pX, pY, pZ, pYaw, pPitch, Config.preferAsyncDBCalls);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (Config.allowPerWorldAttunement == false)
				try {
					Database.removeOtherWorldAttunments(pName, pWorld, Config.preferAsyncDBCalls);
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

		}